當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python os.walk用法及代碼示例

用法:

os.walk(top, topdown=True, onerror=None, followlinks=False)

通過自上而下或自下而上遍曆樹,在目錄樹中生成文件名。對於以目錄 top 為根的樹中的每個目錄(包括 top 本身),它會產生一個三元組 (dirpath, dirnames, filenames)

dirpath 是一個字符串,是目錄的路徑。 dirnamesdirpath 中子目錄的名稱列表(不包括 '.''..' )。 filenamesdirpath 中非目錄文件的名稱列表。請注意,列表中的名稱不包含路徑組件。要獲取 dirpath 中文件或目錄的完整路徑(以 top 開頭),請執行 os.path.join(dirpath, name) 。列表是否排序取決於文件係統。如果在生成列表期間從dirpath 目錄中刪除或添加文件,則未指定是否包含該文件的名稱。

如果可選參數 topdownTrue 或未指定,則在其任何子目錄的三元組之前生成目錄的三元組(目錄是自上而下生成的)。如果 topdownFalse ,則在其所有子目錄的三元組之後生成目錄的三元組(目錄自下而上生成)。無論topdown 的值如何,都會在生成目錄及其子目錄的元組之前檢索子目錄列表。

topdownTrue 時,調用者可以就地修改 dirnames 列表(可能使用 del 或切片賦值),並且 walk() 隻會遞歸到名稱保留在 dirnames 中的子目錄;這可用於修剪搜索,強製執行特定的訪問順序,甚至在調用者再次恢複 walk() 之前通知 walk() 有關調用者創建或重命名的目錄。當topdownFalse 時修改dirnames 對walk 的行為沒有影響,因為在自底向上模式下,dirnames 中的目錄是在dirpath 本身生成之前生成的。

默認情況下,來自 scandir() 調用的錯誤將被忽略。如果指定了可選參數onerror,它應該是一個函數;它將使用一個參數調用,即 OSError 實例。它可以報告錯誤以繼續遍曆,或引發異常以中止遍曆。請注意,文件名可用作異常對象的filename 屬性。

默認情況下,walk() 不會進入解析為目錄的符號鏈接。將 followlinks 設置為 True 以訪問支持符號鏈接的係統上的目錄。

注意

請注意,如果鏈接指向其自身的父目錄,則將 followlinks 設置為 True 可能會導致無限遞歸。 walk() 不跟蹤它已經訪問過的目錄。

注意

如果您傳遞相對路徑名,請不要在 walk() 的恢複之間更改當前工作目錄。 walk() 永遠不會更改當前目錄,並假定其調用者也不會。

這個例子顯示了起始目錄下每個目錄中非目錄文件占用的字節數,除了它不在任何 CVS 子目錄下查找:

import os
from os.path import join, getsize
for root, dirs, files in os.walk('python/Lib/email'):
    print(root, "consumes", end=" ")
    print(sum(getsize(join(root, name)) for name in files), end=" ")
    print("bytes in", len(files), "non-directory files")
    if 'CVS' in dirs:
        dirs.remove('CVS')  # don't visit CVS directories

在下一個示例中(shutil.rmtree() 的簡單實現),自下而上遍曆樹是必不可少的,rmdir() 不允許在目錄為空之前刪除目錄:

# Delete everything reachable from the directory named in "top",
# assuming there are no symbolic links.
# CAUTION:  This is dangerous!  For example, if top == '/', it
# could delete all your disk files.
import os
for root, dirs, files in os.walk(top, topdown=False):
    for name in files:
        os.remove(os.path.join(root, name))
    for name in dirs:
        os.rmdir(os.path.join(root, name))

使用參數 toptopdownonerrorfollowlinks 引發審計事件 os.walk

在 3.5 版中更改:這個函數現在調用os.scandir代替os.listdir(),通過減少對os.stat.

在 3.6 版中更改:接受一個path-like 對象.

相關用法


注:本文由純淨天空篩選整理自python.org大神的英文原創作品 os.walk。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。