標籤:
Python 檔案夾及檔案操作
我們經常會與檔案和目錄打交道,對於這些操作,python可以使用 os 及 shutill 模組,其中包含了很多操作檔案和目錄的函數。這邊,僅介紹通常會用到的方法。
os 可以操作簡單的檔案夾及檔案操作,引入用 import os,可用 help(os) 或是 dir(os) 查看其用法。注意有些函數在os模組中,有的是在os.path模組中。
shutil 模組提供了大量的檔案的進階操作。特別針對檔案拷貝和刪除,主要功能為目錄和檔案操作以及壓縮操作。須引入 import shutil ,具體 help。
可先在 D:\ 下建立檔案夾 Python_os , 再在其下建立檔案夾 os, 再在其下建立 test.txt;之後的 os 樣本會在該檔案夾下操作
判斷路徑或檔案
os.path.isabs(...) # 判斷是否絕對路徑
os.path.exists(...) # 判斷是否真實存在
os.path.isdir(...) # 判斷是否是個目錄
os.path.isfile(...) # 判斷是否是個檔案
注意: 把兩個路徑合成一個時,不要直接拼字串,而要通過os.path.join()
函數,這樣可以正確處理不同作業系統的路徑分隔字元。在Linux/Unix/Mac下,os.path.join()
返回這樣的字串: part-1/part-2
Try
而Windows下會返回這樣的字串: part-1\part-2
1 import os 2 import shutil 3 4 file_dir = "D:\\Python_os\\os" # 注意 \\ ;windows 下是這麼表示的;Linux 和 Mac 是 / 5 file_name = "test.txt" 6 file_abs = os.path.join(file_dir, file_name) # os.path.join(...) 表示路徑連結 7 8 9 ‘‘‘判斷路徑或檔案‘‘‘10 print (1,os.path.isabs(file_dir)) # 判斷是否絕對路徑11 print (2,os.path.isabs(file_name)) 12 print (3,os.path.isabs(file_abs)) 13 print (4,os.path.exists(file_abs)) # 判斷是否真實存在14 print (5,os.path.exists(os.path.join(file_dir,"xxx"))) 15 print (6,os.path.isdir(file_dir)) # 判斷是否是個目錄16 print (7,os.path.isdir(file_abs)) 17 print (8,os.path.isfile(file_dir)) # 判斷是否是個檔案18 print (9,os.path.isfile(file_abs))
運行結果:
路徑名、檔案名稱分隔
os.path.split(...) # 分隔目錄和檔案名稱/檔案夾名
os.path.splitdrive(...) # 分隔盤符(windows系統)
os.path.splitext(...) # 分隔檔案和副檔名
運行結果:
這些合并、拆分路徑的函數並不要求目錄和檔案要真實存在,它們只對字串進行操作。
工作目錄及建立檔案夾操作
os.path.getcwd() # 擷取當前工作目錄
os.path.chdir(...) # 改變工作目錄
os.path.listdir(...) # 列出目錄下的檔案
os.path.chdir(...) # 建立單個目錄 注意:建立多級用 os.makedirs()
os.path.listdir(...) # 建立多級目錄
1 import os 2 3 file_dir = "D:\\Python_os\\os" 4 5 print (os.getcwd()) # 擷取當前工作目錄 6 os.chdir(file_dir) # 改變工作目錄 7 print (os.getcwd()) 8 print (os.listdir(file_dir)) # 列出當前工作目錄的所有檔案 Python2 不支援 os.listdir() Python3 會列出當前工作目錄下的所有檔案 9 os.mkdir("test_mkdir") # 在當前工作目錄下建立檔案夾 test_mkdir;注意不可存在相同檔案夾,不然會報錯10 os.makedirs("test_mkdir\\test1")11 os.chdir(".\\test_mkdir") # . 表示本級目錄; .. 表示上級目錄12 print (os.getcwd()) 13 for i in range(2,6): # 使用for迴圈等,可方便的建立多個檔案夾14 dir_name = "test" + str(i)15 os.mkdir(dir_name)
在執行了上述執行個體代碼後,os 檔案夾中建立了空的 test_mkdir 檔案夾,而 test_dir 檔案夾下也建立出了 test1 至 test5 的空檔案夾
建立檔案夾可能會出錯,原因具體有:(1) path 已存在時(不管是檔案還是檔案夾) (2) 磁碟機不存在 (3) 磁碟已滿 (4) 磁碟是唯讀或沒有寫入權限
刪除檔案夾/檔案
os.rmdir(...) # 刪除空檔案夾 注意:必須為空白檔案夾 如需刪除檔案夾及其下所有檔案,需用 shutil
os.remove(...) # 刪除單一檔案
shutil.rmtree(...) # 刪除檔案夾及其下所有檔案
在上方樣本的檔案夾基礎上,操作刪除 test1 檔案夾 (空檔案夾可用 os.rmdir() ),刪除 test_mkdir 及其下所有檔案();範例程式碼如下
1 import os 2 import shutil 3 4 file_dir = "D:\\Python_os\\os" 5 6 ‘‘‘ 刪除檔案/檔案夾 ‘‘‘ 7 os.chdir(file_dir+"\\test_mkdir") 8 print(os.getcwd()) # 確保當前工作目錄 9 print(os.listdir(os.getcwd())) # 查看當前檔案夾下所有檔案 10 os.rmdir("test1") # 刪除 test1 檔案夾(空檔案夾)11 print(os.listdir(os.getcwd())) 12 os.chdir("..\\")13 print(os.getcwd()) # 切換到上級目錄14 print(os.listdir(os.getcwd()))15 shutil.rmtree("test_mkdir") # 刪除 test_mkdir 及其下所有檔案
可見運行結果如下;產生異常的可能原因: (1) 路徑不存在 (2) 路徑子目錄中有檔案或下級子目錄(os.rmdir) (3) 沒有操作許可權或唯讀
只是刪除單一檔案,則用 os.remove("test.txt") 即可;產生異常的可能原因: (1) 檔案不存在 (2) 對該檔案沒有操作許可權或唯讀。
重新命名
可對某一檔案或檔案夾重新命名 os.rename(oldfileName, newFilename)
在os檔案夾中建立檔案夾 test,檔案 test.txt
1 ‘‘‘ 重新命名檔案夾/檔案 ‘‘‘2 os.chdir(file_dir)3 print(os.listdir(os.getcwd()))4 os.rename("test","test1") 5 os.rename("test.txt","test1.txt") # 重新命名,注意需要帶副檔名6 print(os.listdir(os.getcwd()))
可見運行結果如下;產生異常的可能原因: (1) oldfilename 舊檔案名稱不存在(檔案須帶副檔名) (2)newFilename 新檔案已經存在
注意:新檔案的副檔名不能遺漏,理論上需要保持類型一致;但這也不失為改檔案類型的一種方式(相當於直接改檔案的副檔名)
Python學習(九)IO 編程 —— 檔案夾及檔案操作