1. 程式人生 > >Python 讀取指定目錄及其子目錄下所有檔名

Python 讀取指定目錄及其子目錄下所有檔名

Python 讀取指定目錄及其子目錄下所有檔名

目標

磁碟中的檔案隨著積累越來越多,當要尋找某個檔案時,使用 windows 的搜尋速度太慢且佔記憶體。因此想要尋找一個可以獲取指定目錄下的所有檔案的檔名,作為一種圖書館索引目錄式的檔案管理方式。

在此使用 python 的os.walk() 函式實現遍歷指定目錄及所有子目錄下的所有檔案。使用 python 3.6 版本實現。
walk()函式返回目錄樹生成器(迭代器)。通過自頂向下遍歷目錄來生成目錄樹中的檔名。對於根目錄頂部(包括頂部本身)樹中的每個目錄,它產生一個3元組(dirpath,dirnames,filenames)。dirpath是一個字串,即目錄的路徑。

dirnames是dirpath中子目錄的名稱列表。filenames是dirpath中非目錄檔名稱的列表。但列表中的名稱不包含路徑,要得到一個完整路徑(從頂部開始)到dirpath中的檔案或目錄,請執行os.path.join(dirpath,name)。更多詳情可檢視 python 標準庫文件os.walk()

實現程式碼如下

import os
def all_path(dirname):
    filelistlog = dirname + "\\filelistlog.txt"  # 儲存檔案路徑
    postfix = set(['pdf','doc','docx'
,'epub','txt','xlsx','djvu','chm','ppt','pptx']) # 設定要儲存的檔案格式 for maindir, subdir, file_name_list in os.walk(dirname): for filename in file_name_list: apath = os.path.join(maindir, filename) if True: # 儲存全部檔名。若要保留指定檔案格式的檔名則註釋該句 #if apath.split('.')[-1] in postfix: # 匹配字尾,只儲存所選的檔案格式。若要儲存全部檔案,則註釋該句
try: with open(filelistlog, 'a+') as fo: fo.writelines(apath) fo.write('\n') except: pass # 所以異常全部忽略即可 if __name__ == '__main__': dirpath = "D:" # 指定根目錄 all_path(dirpath)

程式執行結束將所有檔名儲存為指定目錄下的 filelistlog.txt 檔案。