1. 程式人生 > >python 遍歷多級目錄下檔案的方法

python 遍歷多級目錄下檔案的方法

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

最近用Python讀取資料夾下所有圖片檔案時,遇到一點點麻煩:該資料夾包含多級子資料夾。雖然不是什麼困難事情,但對新手來說可能是一件抓頭的事情。

如圖:讀取圖片及子目錄下的圖片

廢話不多說,直接列出兩種方法

遞迴方法:

def recurrence(path,file_list):
    for file in os.listdir(path):
        fs = os.path.join(path, file)
        if os.path.isfile(fs):
            file_list.append(fs)
        elif os.path.isdir(fs):
            recurrence(fs, file_list)
if __name__=="__main__":
    path = 'C:\\Users\\Desktop\\captchaRec\\驗證碼圖片1020'
    filenames = []  # 帶路徑的檔名存入列表
    recurrence(path, filenames)
    print(len(filenames))

walk方法:

os自帶的遍歷函式

def walk(path, file_list):
    ff = os.walk(path)
    for root, dirs, files in ff:
        for file in files:
            file_list.append(os.path.join(root, file))

scandir方法:

os.scandir方法是一種比較快速的方法,但仍然需要遞迴來實現

def scandir(path,file_list):
    for item in os.scandir(path):
        if item.is_dir():
            scandir(item.path,file_list)
        elif item.is_file():
            file_list.append(item.path)

不讀取隱藏檔案:

考慮到以上方法都會讀取到隱藏檔案,所以想不讀取隱藏檔案,需要增加一個檔案屬性判斷即可。

linux 下隱藏檔案是以句號 “.” 開頭的檔案,根據檔名即可判斷是否為隱藏檔案。

win 下是以檔案隱藏屬性確定的,所以,只能通過微軟的 API 獲取隱藏屬性來判斷是否為隱藏檔案。

import win32api
attr= win32api.GetFileAttributes('dfile.txt')
print(attr)  # 128表示正常

attr值對應的屬性如下所示:

FILE_ATTRIBUTE_READONLY = 1 (0x1)  # 屬性-隱藏
FILE_ATTRIBUTE_HIDDEN = 2 (0x2)   # 屬性-隱藏
FILE_ATTRIBUTE_SYSTEM = 4 (0x4)   # 屬性-系統檔案
FILE_ATTRIBUTE_DIRECTORY = 16 (0x10)
FILE_ATTRIBUTE_ARCHIVE = 32 (0x20)
FILE_ATTRIBUTE_NORMAL = 128 (0x80)   # 屬性-正常
FILE_ATTRIBUTE_TEMPORARY = 256 (0x100)
FILE_ATTRIBUTE_SPARSE_FILE = 512 (0x200)
FILE_ATTRIBUTE_REPARSE_POINT = 1024 (0x400)
FILE_ATTRIBUTE_COMPRESSED = 2048 (0x800)
FILE_ATTRIBUTE_OFFLINE = 4096 (0x1000)
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 8192 (0x2000)
FILE_ATTRIBUTE_ENCRYPTED = 163