- 定義:
假設你希望對某個檔案夾中的所有檔案改名,包括檔案夾中所有子檔案夾中的所有檔案。也就說你需要周遊目錄樹,處理每個檔案。Python正好提供了這樣的函數
- 用法
代碼如下:import os
for folder, subfolders,filenamesin os.walk(r'C:\Users\eilmoro\Desktop\test'):
print('The folder is%s'%folder)
for foldername insubfolders:
print('The subfoldersis %s'%foldername)
for file in filenames:
print('The files is%s'%file)
輸出結果:The folder is C:\Users\eilmoro\Desktop\test
The subfolders is st01
The files is stx01.txt
The files is stx02.txt
The folder is C:\Users\eilmoro\Desktop\test\st01
The subfolders is sst01
The files is sstx01.txt
The files is sstx02.txt
The folder is C:\Users\eilmoro\Desktop\test\st01\sst01
The files is ssstx01.txt
The files is ssstx02.txt
- 注意點
- 第一個for循環是周遊這個test檔案夾及它下面的每一個子檔案夾,檔案及子檔案夾下的子檔案夾和檔案直到目錄的最後一層
- 第一個for後面的三個變量名不用固定形式,取有意義的三個變量名就可以,如:mainfolder, folders, files也是可以的,不影響程式的運作
- 輸出的結果:除了第一個變量是完整的絕對路徑,第二個隻是子檔案夾名的清單,第三個隻是檔案名的清單
- 傳入walk後的路徑要注意轉義字元的問題,若傳入的路徑是'C:\Users\eilmoro\Desktop\test',沒有r,程式運作是會報錯:
- Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun錯誤解決方案
- 可以寫成如下幾種形式:
- 'C:/Users/eilmoro/Desktop/test'
- r'C:\Users\eilmoro\Desktop\test'
- 'C:\\Users\\eilmoro\\Desktop\\test'
我強烈推薦第1種寫法,這在Linux和window下都是行的通的