Python中的os.walk

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

    通過自頂向下或自底向上走樹來生成目錄樹中的文件名。對於根目錄頂部(包括頂部本身)樹中的每個目錄,它產生一個3元組(dirpath,dirnames,filenames)。

    dirpath是一個字符串,即目錄的路徑。 dirnames是dirpath中子目錄的名稱列表(不包括“.”和“..”)。filenames是dirpath中非目錄文件名稱的列表。請注意,列表中的名稱不包含路徑組件。要得到一個完整路徑(從top開始)到dirpath中的文件或目錄,請執行os.path.join(dirpath,name)。

    如果可選參數topdown爲True或未指定,則在其任何子目錄(目錄從上到下生成)的三元組之前生成目錄的三元組。如果topdown爲False,則在其所有子目錄的三元組(即自下而上生成的目錄)之後,生成目錄的三元組。不管topdown的值如何,在目錄及其子目錄的元組被生成之前,子目錄列表被檢索。

    當topdown爲True時,調用者可以就地修改dirnames列表(也許使用del或slice賦值),而walk()只會遞歸到名稱保持dirnames的子目錄中;這可以用來修剪搜索,強制訪問的特定順序,甚至可以在再次恢復walk()之前通知walk()關於調用者創建或重命名的目錄。當topdown爲False時修改dirnames對walk的行爲沒有影響,因爲在自底向上模式下dirnames中的目錄是在生成dirpath之前生成的。

    默認情況下,來自listdir()調用的錯誤將被忽略。如果指定了可選參數onerror,它應該是一個函數;它將被調用一個參數,一個OSError實例。它可以報告錯誤繼續行走,或者提出異常終止行走。請注意,文件名可用作異常對象的文件名屬性。

    默認情況下,walk()不會解析爲目錄的符號鏈接。將followlinks設置爲True,以在支持符號鏈接的系統(比如Unix)上訪問由符號鏈接指向的目錄。

    注意:

    請注意,如果鏈接指向自身的父目錄,則將後續鏈接設置爲True可導致無限遞歸。 walk()不跟蹤它已經訪問的目錄(不保存訪問記錄)。


舉個例子:
文件分佈如下,NULL表示空目錄
---------------------------------------
A  -> AA -> aa1.txt  aa2.txt
    -> AB -> NULL
    -> AC -> NULL
    -> test.py
------------------------------------------
代碼1:
>>> import os
>>>
>>> for root, dirs, files in os.walk(".", topdown=False):
...     for name in files:
...         print(os.path.join(root, name))
...     for name in dirs:
...         print(os.path.join(root, name))
...
.\AA\aa1.txt
.\AA\aa2.txt
.\test.py
.\AA
.\AB
.\AC
--------------------------------------------
代碼2:
>>> for root, dirs, files in os.walk(".", topdown=True):
...     for name in files:
...         print(os.path.join(root, name))
...     for name in dirs:
...         print(os.path.join(root, name))
...
.\test.py
.\AA
.\AB
.\AC
.\AA\aa1.txt
.\AA\aa2.txt


參考:
1.python中os.walk的用法
https://www.jianshu.com/p/bbad16822eab

2.官方文檔
https://docs.python.org/3.5/library/os.html?highlight=os%20walk#os.walk
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章