目錄
- 1. 函式定義
- 2. 示例程式碼
- 3. 使用場景
- 4. 注意事項
- 5. 總結
os.walk()
是 Python 中 os
模組提供的一個用於遞迴遍歷目錄樹的函式。它生成一個三元組 (dirpath, dirnames, filenames)
,分別包含當前目錄路徑、子目錄列表和檔案列表。os.walk()
非常適合用於檔案系統操作,比如查詢特定型別的檔案、複製或刪除檔案等。
1. 函式定義
os.walk(top, topdown=True, onerror=None, followlinks=False)
引數:
top
:必需引數,表示要遍歷的目錄的路徑。topdown
:可選引數,布林值。如果為True
(預設),則先遍歷頂層目錄,再遍歷子目錄。如果為False
,則先遍歷子目錄,再遍歷頂層目錄。onerror
:可選引數,如果指定,遇到錯誤時會呼叫該函式(通常是許可權錯誤)。followlinks
:可選引數,布林值。如果為True
,會跟隨目錄中的符號連結(軟連結)。
返回值
os.walk()
返回一個生成器物件,每次迭代會生成一個 (dirpath, dirnames, filenames)
元組,其中:
dirpath
:當前遍歷到的目錄路徑(字串)。dirnames
:當前目錄下的子目錄名稱列表。filenames
:當前目錄下的檔名稱列表。
2. 示例程式碼
假設有以下目錄結構:
/example_directory
├── file1.txt
├── file2.txt
└── sub_directory
├── file3.txt
└── file4.txt
使用 os.walk()
遍歷目錄:
import os
for dirpath, dirnames, filenames in os.walk('/example_directory'):
print(f"當前目錄路徑:{dirpath}")
print(f"子目錄:{dirnames}")
print(f"檔案:{filenames}")
print("-" * 20)
輸出:
當前目錄路徑:/example_directory
子目錄:['sub_directory']
檔案:['file1.txt', 'file2.txt']
--------------------
當前目錄路徑:/example_directory/sub_directory
子目錄:[]
檔案:['file3.txt', 'file4.txt']
--------------------
3. 使用場景
-
查詢特定型別的檔案:
可以使用os.walk()
遍歷目錄樹並篩選出特定字尾的檔案。target_extension = ".txt" for dirpath, dirnames, filenames in os.walk('/example_directory'): for filename in filenames: if filename.endswith(target_extension): print(os.path.join(dirpath, filename))
-
統計目錄中檔案的數量:
使用os.walk()
統計目錄中包含的檔案數量。file_count = 0 for _, _, filenames in os.walk('/example_directory'): file_count += len(filenames) print(f"檔案總數:{file_count}")
-
複製或移動檔案:
結合shutil
模組,可以使用os.walk()
遍歷目錄並複製或移動檔案。
4. 注意事項
- 遞迴深度控制:
os.walk()
無法直接限制遞迴深度。如果需要控制深度,可以手動檢查dirpath
的深度或在遍歷過程中修改dirnames
。 - 軟連結迴圈:如果目錄中存在指向父目錄的符號連結,設定
followlinks=True
可能導致無限迴圈。在這種情況下,推薦設定為False
。
5. 總結
os.walk()
是一個強大的工具,適用於遍歷目錄結構。透過它,您可以輕鬆實現各種檔案系統相關的操作。