Python(os.walk())

做梦当财神發表於2024-11-02

目錄
  • 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. 使用場景

  1. 查詢特定型別的檔案:
    可以使用 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))
    
  2. 統計目錄中檔案的數量:
    使用 os.walk() 統計目錄中包含的檔案數量。

    file_count = 0
    for _, _, filenames in os.walk('/example_directory'):
        file_count += len(filenames)
    print(f"檔案總數:{file_count}")
    
  3. 複製或移動檔案:
    結合 shutil 模組,可以使用 os.walk() 遍歷目錄並複製或移動檔案。



4. 注意事項

  • 遞迴深度控制:os.walk() 無法直接限制遞迴深度。如果需要控制深度,可以手動檢查 dirpath 的深度或在遍歷過程中修改 dirnames
  • 軟連結迴圈:如果目錄中存在指向父目錄的符號連結,設定 followlinks=True 可能導致無限迴圈。在這種情況下,推薦設定為 False


5. 總結

os.walk() 是一個強大的工具,適用於遍歷目錄結構。透過它,您可以輕鬆實現各種檔案系統相關的操作。



相關文章