首頁 > 軟體

Python檔案目錄操作常用模組的使用詳解

2022-07-29 22:04:28

 Python中用於檔案目錄操作的常用模組有os, shutil,pathlib等.

os就是“Operating System”的縮寫,顧名思義,os模組提供的就是各種 Python 程式與作業系統進行互動的介面。通過使用os模組,一方面可以方便地與作業系統進行互動,另一方面也可以提高程式碼的可移植性,方便程式碼跨作業系統平臺使用。如果該模組中相關功能出錯,會丟擲OSError異常或其子類異常。

shutil可以簡單地理解為sh + util,shell工具的意思。shutil模組是對os模組的補充,主要針對檔案的拷貝、刪除、移動、壓縮和解壓操作。

1. os模組

Python的os模組封裝了常見的檔案和目錄操作。

通常來說,不建議用from os import *來匯入os模組。os模組中有些函數與python內建函數重名,比如說open()。這種方式匯入時,os.open就把python內建open()覆蓋了。

如果是讀寫檔案的話,建議使用內建函數open();如果是路徑相關的操作,建議使用os的子模組os.path;如果要逐行讀取多個檔案,建議使用fileinput模組;要建立臨時檔案或路徑,建議使用tempfile模組;要進行更高階的檔案和路徑操作則應當使用shutil模組。

使用os模組可以寫出作業系統無關的程式碼。但是os也可以呼叫一些特定系統的擴充套件功能,但要切記一點:一旦這樣做就會極大損害程式碼的可移植性。

1.1 獲取系統資訊

判斷使用的平臺:字串指示你正在使用的平臺。比如對於Windows,它是'nt',而對於Linux/Unix使用者,它是 'posix'。有時候給出的資訊不夠細。

# 獲取平臺名稱. 注意這個不是函數,所以不需要帶括號()
os.name
 
# 獲取系統的核心數
os.cpu_count()
 
# 改變許可權
os.chmod(path, mode)

1.2  工作目錄與路徑相關的操作

# 獲取路徑和檔名等
os.getcwd()            #函數得到當前工作目錄,即當前Python指令碼工作的目錄路徑
os.path.abspath($name) #當前目錄下檔案或資料夾的絕對路徑
os.path.basename(path) #返回檔名
os.path.dirname(path)  #返回檔案的上級路徑
os.path.split()        #分離檔名和上級路徑
os.path.join()         #合併檔名和指定路徑
os.path.splitext()     #分離檔名與擴充套件名,返回的擴充套件名包括了'.'符號,預設只返回第一個'.字尾'和字首。
 
# 改變工作目錄到dirname
os.chdir(dirname)
 
# 該函數相當於linux命令「ls」,列舉出指定目錄中的內容。其返回值是一個列表。列表中的每一格元素表示一個子目錄名,或者一個檔名
os.listdir(path) 
 
# 建立一個目錄
os.mkdir(path)    
# 刪除一個目錄
os.rmdir(path)    
# 重新命名
os.rename(src, dst) 
 
# 獲取檔案大小資訊
os.path.getsize(name)   #獲得檔案大小,如果name是目錄返回0L

1.3 判斷是否檔案或目錄以及指定檔案目錄是否存在

#函數分別檢驗給出的路徑是一個檔案?
os.path.isfile()   
#函數分別檢驗給出的路徑是一個目錄?
os.path.isdir()    
#函數用來檢驗給出的路徑是否真地存在
os.path.exists()   

1.4 刪除一個檔案或者目錄

Ref: How to delete a file or folder in Python? - Stack Overflow

# 刪除一個檔案
os.remove()
# 刪除一個檔案
os.unlink() 
# 刪除一個空目錄,如果不是空目錄會報錯
os.rmdir()

BTW, 除了OS模組外,shutil和pathlib也提供了相應的函數。 

# 刪除目錄,包括其中的檔案以及子目錄,需要小心使用
shutil.rmtree()
# removes a file or symbolic link.
pathlib.Path.unlink() 
# removes an empty directory.
pathlib.Path.rmdir() 

1.5 串連建立或者分離一個檔案目錄路徑

#os.path.join(datadir,file)
 
#與直接字串連線不同的是,'D:/tmp'即可,不需要'D:/tmp/'
os.path.join('D:/tmp','tmp.txt')
 
 
# 返回路徑的目錄和檔名,即將目錄和檔名分開,而不是一個整體。此處只是把前後兩部分分開而已。就是找最後一個'/'。
os.path.split(path)

1.6 執行外部shell命令

os.system(cmd)      #執行外部shell命令。

2. shutil模組        

shutil可以簡單地理解為sh + util,shell工具的意思。shutil模組是對os模組的補充,主要針對檔案的拷貝、刪除、移動、壓縮和解壓操作。

2.1 拷貝檔案

shutil會自動識別拷貝的到底是檔案還是資料夾, 如果存在同名的檔案將會自動進行覆蓋。

shutil.copy($file_path, $dir_path)

2.2 移動或重新命名檔案

如果路徑下已有重名的檔案,將報錯!

shutil.move($file_path, $dir_path) # 移動到另外一個資料夾中
shutil.move($file_path, $new_file_path) # 重新命名為新的絕對路徑

2.3 拷貝資料夾/刪除資料夾

shutil.copytree($file_path, $dir_path) # 拷貝所有檔案到新的資料夾下,保持原有的檔案結構。
shutil.rmtree($dir_path) # 刪除此路徑的資料夾

2.4 生成壓縮檔案

shutil.make_archive(base_name, 'gztar', root_dir, [base_dir)

base_name : 建立的目標檔名,包括路徑,減去任何特定格式的擴充套件。

format : 壓縮包格式。”zip”, “tar”, “bztar”或”gztar”中的一個。

root_dir : 需要打包的資料夾路徑。打包完成時儲存在上一級目錄。

base_dir : 使用後會將base_dir作為路徑,解壓後有個有層級的資料夾,而僅非只有單獨的打包內容。

2.5 解壓檔案

shutil.unpack_archive(filename[, extract_dir[, format]])

filename是壓縮檔案的完整路徑

extract_dir是解壓縮路徑,預設為當前目錄。

format是壓縮格式。預設使用檔案字尾名程式碼的壓縮格式。”zip”, “tar”, “bztar”或”gztar”中的一個。

到此這篇關於Python檔案目錄操作常用模組的使用詳解的文章就介紹到這了,更多相關Python檔案目錄操作內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com