最近用Python讀取文件夾下全部圖片文件時,遇到一點點麻煩:該文件夾包含多級子文件夾。雖然不是什麼困難事情,但對新手來講多是一件抓頭的事情。linux
如圖:讀取圖片及子目錄下的圖片 api
廢話很少說,直接列出兩種方法app
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))
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))
os.scandir方法是一種比較快速的方法,但仍然須要遞歸來實現3d
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)
考慮到以上方法都會讀取到隱藏文件,因此想不讀取隱藏文件,須要增長一個文件屬性判斷便可。code
linux 下隱藏文件是以句號 「.」 開頭的文件,根據文件名便可判斷是否爲隱藏文件。
blog
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 = 16384 (0x4000)