python:遍歷目錄樹

假定你希望對某個資料夾中的所有檔案改名,包括該資料夾中所有子資料夾中

的所有檔案。也就是說,你希望遍歷目錄樹,處理遇到的每個檔案。寫程式完成這

件事,可能需要一些技巧。好在,Python 提供了一個函式,替你處理這個過程。

請看 C:\delicious 資料夾及其內容,如圖所示。

python:遍歷目錄樹

這裡有一個例子程式,針對圖的目錄樹,使用了 os。walk()函式:

import os

for folderName, subfolders, filenames in os。walk(‘C:\\delicious’):

print(‘The current folder is ’ + folderName)

for subfolder in subfolders:

print(‘SUBFOLDER OF ’ + folderName + ‘: ’ + subfolder)

for filename in filenames:

print(‘FILE INSIDE ’ + folderName + ‘: ’+ filename)

print(‘’)

os。walk()函式被傳入一個字串值,即一個資料夾的路徑。你可以在一個 for

迴圈語句中使用 os。walk()函式,遍歷目錄樹,就像使用 range()函式遍歷一個範圍的

數字一樣。不像 range(),os。walk()在迴圈的每次迭代中,返回 3 個值:

1.當前資料夾名稱的字串。

2.當前資料夾中子資料夾的字串的列表。

3.當前資料夾中檔案的字串的列表。

所謂當前資料夾,是指 for 迴圈當前迭代的資料夾。程式的當前工作目錄,不

會因為 os。walk()而改變。

就像你可以在程式碼 for i in range(10):中選擇變數名稱 i 一樣,你也可以選擇前面

列出來的 3 個字的變數名稱。我通常使用 foldername、subfolders 和 filenames。

執行該程式,它的輸出如下:

The current folder is C:\delicious

SUBFOLDER OF C:\delicious: cats

SUBFOLDER OF C:\delicious: walnut

FILE INSIDE C:\delicious: spam。txt

The current folder is C:\delicious\cats

FILE INSIDE C:\delicious\cats: catnames。txt

FILE INSIDE C:\delicious\cats: zophie。jpg

The current folder is C:\delicious\walnut

SUBFOLDER OF C:\delicious\walnut: waffles

The current folder is C:\delicious\walnut\waffles

FILE INSIDE C:\delicious\walnut\waffles: butter。txt。

因為 os。walk()返回字串的列表,儲存在 subfolder 和 filename 變數中,所以你

可以在它們自己的 for 迴圈中使用這些列表。用你自己定製的程式碼,取代 print()函

數呼叫(或者如果不需要,就刪除 for 迴圈)。