Python基礎-18目錄與文件

来源:https://www.cnblogs.com/surpassme/archive/2020/06/03/13034964.html
-Advertisement-
Play Games

18.目錄與文件 18.1 os和shutil 日常使用過程中,難免需要使用跟文件系統相關的標準庫。在使用Python文件系統中,常用的庫為os和shutil標準庫,方法如下所示: import os import shutil 18.1.1 遍歷文件夾 os.getcwd():獲取當前工作目錄,返 ...


18.目錄與文件

18.1 os和shutil

    日常使用過程中,難免需要使用跟文件系統相關的標準庫。在使用Python文件系統中,常用的庫為osshutil標準庫,方法如下所示:

import os
import shutil

18.1.1 遍歷文件夾

os.getcwd():獲取當前工作目錄,返回為字元串形式,類似於Linux中的命令pwd

os.listdir(path):獲取指定路徑中的文件及文件夾,返回為列表形式,類似於Linux中的命令ls

os.walk(path):以遞歸形式遍歷指定路徑中的文件及文件夾,返回形式為生成器,類似於Linux中的命令ls -R,示例代碼如下所示:

import os

curPath=os.getcwd()
# 使用列表推導返回當前目錄中所有的文件
fileList=[ os.path.join(dirPath,fileName) for dirPath,dirName,fileNames in os.walk(curPath) for fileName in fileNames if os.path.isfile(os.path.join(dirPath,fileName))]

18.1.2 改變路徑

os.chdir("絕對/相對路徑"):切換到其他目錄,類似於Linux中的命令cd

os.path.join():合成完整的路徑

如果在需要合成完整路徑,則推薦使用此方法,在Windows中路徑分隔符為 \ ,在Linux中路徑分隔符為 /

os.path.expanduser(path):把path中對用戶相關的特殊字元轉換為用戶目錄,在Linux中,使用~表示用戶家目錄,如果在Linux進行切換用戶家目錄,則可以使用該方法,示例代碼如下所示:

>>> os.path.expanduser(os.path.join("~","Python"))
'C:\\Users\\Surpass\\Python'

18.1.3 創建文件夾

os.mkdir(path,[mode]):創建文件夾,類似於Linux中的命令mkdir

使用該方法時,要求上一級目錄必須存在。

os.makedirs(path,[mode,exist_ok]):遞歸創建文件夾,類似於Linux中的命令mkdir -p

使用該方法時,上一級目錄可以不用存在,但如果存在,想要覆蓋則必須使用參數exist_ok=True

18.1.4 覆蓋/複製/移動文件或文件夾

shutil.copyfileobj(src,dst,length):使用文件1的內容覆蓋文件2的內容,類似於Linux中的命令cp,示例代碼如下所示:

import os
import shutil

curPath=os.getcwd()
file1=open(os.path.join(curPath,"1.txt"),"r",encoding="utf8")
file2=open(os.path.join(curPath,"2.txt"),"w",encoding="utf8")
shutil.copyfileobj(file1,file2)

shutil.copyfile(src,dst):複製文件併進行重命名,類似於Linux中的命令cp
shutil.copy(src,dst):功能同上,示例代碼如下所示:

import os
import shutil

curPath=os.getcwd()
filePath1=os.path.join(curPath,"1.txt")
filePath2=os.path.join(curPath,"2.txt")
shutil.copyfile(filePath1,filePath2)

shutil.copy2(srcFile,dstDir):複製到文件到目錄,示例代碼如下所示:

import os
import shutil

curPath=os.getcwd()
srcPath=os.path.join(curPath,"mvdir.zip")
dstPath=os.path.join(curPath,"mvdir")
shutil.copy2(srcPath,dstPath)

shutil.copytree(srcPath,dstPath,ignore=shutil.ignore_patterns("*.py")):遞歸複製目錄到另一個目錄中,類似於Linux中的命令cp -r,需要註意的是 目的目錄必須不存在,示例代碼如下所示:

import os
import shutil

srcPath=os.getcwd()
dstPath=os.path.join(srcPath,"copydir")
# 複製目錄,並忽略擴展名為py的文件
shutil.copytree(srcPath,dstPath,ignore=shutil.ignore_patterns("*.py"))

shutil.rmtree(dst,ignore_errors=True):遞歸刪除目錄下的所有文件及文件夾,含目錄本身,類似於Linux中的命令rm -rf,示例代碼如下所示:

import os
import shutil

srcPath=os.getcwd()
dstPath=os.path.join(srcPath,"copydir")
shutil.rmtree(dstPath,ignore_errors=True)

os.remove(path):刪除文件,但不能刪除文件夾,類似於Linux中的命令rm,示例代碼如下所示:

import os

curPath=os.getcwd()
srcPath=os.path.join(curPath,"mvdir.zip")
os.remove(srcPath)

shutil.move(srcPath,dstPath):遞歸移動文件或文件夾到另一個目錄,類似於Linux中的命令mv,示例代碼如下所示:

import os
import shutil

curPath=os.getcwd()
srcPath=os.path.join(curPath,"copy")
dstPath=os.path.join(curPath,"mvdir")
shutil.move(srcPath,dstPath)

shutil.make_archive(fileName,format,dstDir):對目錄創建壓縮打包,format為zip/tar等,類似於Linux中的命令tar -cf,示例代碼如下所示:

import os
import shutil

curPath=os.getcwd()
srcPath=os.path.join(curPath,"copy")
dstPath=os.path.join(curPath,"mvdir")
shutil.make_archive(dstPath,"zip",dstPath)

18.1.5 文件或文件夾是否存在

os.path.exists(path)

18.1.6 判斷是否為文件或文件夾

os.path.isfile(path)
os.path.isdir(path)

18.1.7 獲取文件名或路徑

os.path.basename(path):獲取文件名(含擴展名)
os.path.dirname(path):獲取文件路徑
os.path.splitext(path):分離文件名和擴展名
os.path.split(path):分離文件路徑和文件名(含擴展名)

import os

tmpPath=r"C:\Users\Surpass\PycharmProjects\1.txt"
fileName=os.path.basename(tmpPath)
filePath=os.path.dirname(tmpPath)
fileExtName=os.path.splitext(tmpPath)[-1]
path,fname=os.path.split(tmpPath)

18.2 pathlib

    除os標準庫之外,在Python 3.4及之後的版本,有一個更好的用的標準庫pathlib,使用起來更方便簡單。在使用之前需要導入該庫

import pathlib

18.2.1 遍歷文件夾

p.cwd():返回當前工作目錄,相當於os.getcwd()
p.home():返回用戶家目錄,相當於Linux命令中的cd ~
p.resolve():獲取完整路徑
p.iterdir():獲取目錄中的文件和文件夾,相當於os.listdir()
p.glob(".py"):獲取目錄中的文件和文件夾,相當於os.listdir(),可以添加篩選條件
p.rglob("
"):遞歸獲取目錄中的文件和文件夾,相當於os.walk(),可以添加篩選條件

示例代碼如下所示:

from pathlib import Path

tmpPath=r"C:\Users\Surpass\PycharmProjects"
for item in Path(tmpPath).rglob("*"):
    temp=Path(item)
    if not temp.is_dir():
        print(item)

18.2.2 改變路徑

Path(p,file/path) 相當於os.path.join()
p.expanduser():相當於os.path.expanduser(path)

from pathlib import Path
tmpPath=r"C:\Users\Surpass\PycharmProjects\"
p=Path(tmpPath)
p=Path(p,"aa.txt")

18.2.3 創建文件夾

p.mkdir(exist_ok=True):前提是上級目錄必須存在,相當於os.mkdir()
p.mkdir(exist_ok=True,parents=True):遞歸創建文件夾,推薦這種用法,相當於os.makedirs()

from pathlib import Path

tmpPath=r"C:\Users\Surpass\PycharmProjects\Test"
p=Path(tmpPath)
p.mkdir()

tmpPath=r"C:\Users\Surpass\PycharmProjects\TestMakeFile\AddTest"
p=Path(tmpPath)
p.mkdir(exist_ok=True,parents=True)

18.2.4 獲取文件名或路徑

from pathlib import Path

tmpPath=r"C:\Users\Surpass\PycharmProjects\1.txt"
p=Path(tmpPath)
p.name # 獲取文件名,包含擴展名
p.stem # 獲取文件名,不包含擴展名
p.suffix # 獲取文件擴展名,返回為字元串形式
p.suffixes # 獲取文件擴展名,返回為列表形式
p.parent # 獲取文件名路徑,相當於os.path.basename()

18.2.5 判斷是否為文件或文件夾

Path.is_file()
Path.is_dir()

18.2.6 文件或文件夾是否存在

Path.exists()

18.2.7 創建文件

p.touch() :相當於Linux命令中的touch

示例代碼如下所示:

from pathlib import Path

filePath=r"C:\Users\Administrator\PycharmProjects\surpass\test\test.txt"
p=Path(filePath)
p.touch()

18.2.8 刪除文件夾或文件

p.unlink():刪除文件
p.rmdir():刪除空目錄,如果目錄不為空,則會出現報錯

本文地址:https://www.cnblogs.com/surpassme/p/13034964.html
本文同步在微信訂閱號上發佈,如各位小伙伴們喜歡我的文章,也可以關註我的微信訂閱號:woaitest,或掃描下麵的二維碼添加關註:
MyQRCode.jpg


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 內置對象:對象是由屬性和方法組成的,使用點語法訪問 一,array數組 1. 特點: 數組用於存儲若幹數據,自動為每位數據分配下標,從0開始 數組中的元素不限數據類型,長度可以動態調整 動態操作數組元素 :根據元素下標讀取或修改數組元素,arr[index] 2. 屬性和方法: 屬性 : lengt ...
  • 深克隆和淺克隆 淺克隆 arr.slice(0) arr.concat() let obj2 = {... obj} 深克隆 function deepClone(obj){ //判斷參數是不是一個對象 let objClone = new obj.constructor(); if(obj && ...
  • 前端的前景怎麼樣,以下是我的分享: 隨著互聯網的高速發展,不知不覺中我們的生活已被互聯網從四面八方給包圍,不管是網上點餐,網上購物、網上購票,還是網上學習,這都表明瞭現在就是互聯網的天下。因此,也就越來越多的選擇互聯網行業,選擇學習前端開發,但是大家也有擔心的問題,最近幾年web前端發展趨勢良好,但 ...
  • HTTP 請求中,空格應該被編碼為什麼?今天我們走進 RFC 文檔和 W3C 文檔,瞭解一下這個「史詩級」大坑。 ...
  • 面向介面編程能非常有效地提高代碼質量,可以將介面和實現相分離,封裝不穩定的實現,暴露穩定的介面。上游系統面向介面而非實現編程,不依賴不穩定的實現細節,這樣當實現發生變化的時候,上游系統的代碼基本上不需要做改動,以此來降低耦合性,提高擴展性。 ...
  • 背景 最近瞭解到很多朋友對限流、熔斷、降級、隔離、超時重試的概念和應用場景理解的不是很到位,所以想用五篇的篇幅稍微系統的介紹一下。 本篇是第一篇,是限流做詳解,如果反饋好的話,我會繼續寫下麵四篇。不好的話就算了,算我理解不夠,再自己總結總結。 限流的概念 有朋友問我限流和熔斷有什麼區別,我的理解很簡 ...
  • 老孟導讀:歷時1年的時間,整理完成了330+組件的詳細用法,不僅包含UI組件,還包含了功能性的組件。 雖然整理了 330+的組件基本用法,但並不是讓你每一個都學習一遍,任何技術基本都是掌握 20%就可以解決 80%的問題,因此只需學會基礎組件就可以上手項目了,至於其他的控制項只需大概瀏覽一下,做項目的 ...
  • 19. 文件讀寫 19.1 文件操作 數據持久化,是將程式中的對象以數據的方式保存到磁碟上,在程式下次運行時,可以將數據從磁碟上恢復到記憶體中。數據持久化的方式有很多,而最為常見的方式是將數據以文件的形式保存。在Python中,可以通過內置函數的方法進行文件的讀、寫、刪除等操作。 19.1.1 文件的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...