Python 讀取指定目錄及其子目錄下所有檔名
阿新 • • 發佈:2018-12-23
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 檔案。