天天看點

os.walk() 目錄生成器

目錄生成器 Directory tree generator.!

walk() 是 generator,直接print() 為  <generator object walk at 0x000001EB1C519888> ,一般常用 for 循環周遊其傳回值。

os.walk(top [,topdown=True [,οnerrοr=None [,followlinks=False]]])      

函數會周遊 top 目錄(包含其本身)下的所有檔案夾。

參數:

top - 要周遊的目錄位址(字元串形式),分隔符為 /,而不能是 \

topdown - 可選參數,預設True,從 top 向子目錄方向生成 tuple 結果;若為 False,則從子目錄向 top 根目錄方向生成 tuple 結果

onerror - 可選,預設None,需要一個 callable 對象,當 walk 需要異常時,才會被調用。

followlinks -- 可選,預設False,如果為 True,則會周遊目錄下的快捷方式(linux 下是軟連接配接 symbolic link )實際所指的目錄(預設關閉),如果為 False,則優先周遊 top 的子目錄。

傳回值:

對于以 top 為根的目錄樹中的每個目錄(包括 top 本身,同時每一層周遊僅為目前檔案夾内容,每一層周遊均不包括 ’ . ‘ 和 ’ .. ',),産生一個含有 3 元素的元組(yields a 3-tuple):

dirpath, dirnames, filenames

  • dirpath - 字元串str,目前正在周遊的檔案夾本身的位址
  • dirnames - 清單list,dirpath 中所有目錄的名稱(不包括子目錄,不包括 ’ . ‘ 和 ’ .. ')
  • filenames - 清單list,dirpath 中所有非目錄檔案的名稱(不包括子目錄)。

注意,tuple中的名稱僅僅是名稱,不是完整的路徑。要想擷取 filenames 的完整路徑(以 top開頭),請執行

import os

for dirpath, dirnames, filesnames in os.walk("D:/project/opencv3", topdown=False):
    for name in files:
        print(os.path.join(root, name))      

常用示例:

import os

# walk 生成器
# print(os.walk("D:/project/opencv3/c6"))
# <generator object walk at 0x000001EB1C519888>

# "." 目前檔案的根目錄
# for root, dirs, files in os.walk("."):
for root, dirs, files in os.walk("D:/project/opencv3/c6"):
    # 檔案路徑
    for name in files:
        print(os.path.join(root, name))
        # D:/project/opencv3/c6\test.py
    # 子檔案夾的路徑
    for name in dirs:
        print(os.path.join(root, name))
        # D:/project/opencv3/c6\python_c6      

轉載于:https://www.cnblogs.com/gengyi/p/10546102.html