下面要為大家分享一篇Python3.遍歷某資料夾提取特定檔案名稱的實例,具有很好的參考價值,希望對大家有所幫助。一起來看看吧
批次處理檔時,常需要先遍歷某個路徑提取特定條件的檔名。這篇寫一個暴力遍歷但很簡潔的方法,真的非常簡潔但是非常暴力。
範例目標是:取得存放遙感資料的資料夾下資料夾名稱以「_BAD」結尾的資料夾內容。因為該文件下分級很多(年/月/產品類型/),目標資料夾很多且存在在最後一級,手動查看很煩。
程式碼如下(知識點總結程式碼後):
## -*- coding: utf-8 -*- """ 遍历某路径下所有文件夹,获得特定文件夹下所有文件 很暴力,真的遍历了所有的文件夹 20180124 @author: 墨大宝 """ import os TARGETPATH = r'F:\MODIS_DATA' records = [] for currentDir, _, includedFiles in os.walk(TARGETPATH): if not currentDir.endswith('_BAD'): continue else: records.append(currentDir) # 将以“_BAD”结尾的文件夹名加入records records.extend(includedFiles) # 将该文件夹内的文件名列表扩展到records # 将records写入.txt txtFile = open(os.path.join(TARGETPATH, '02_04_BAD.txt'), 'w') txtFile.write(os.linesep.join(records)) txtFile.close() # 将排序后的records写入.txt with open(os.path.join(TARGETPATH, '02_04_BAD_SORTED.txt'), 'w') as txtFile: txtFile.write('\n'.join(sorted(records)))##os.walk ()返回Directory tree generator。每次產生格式為(dirpath, dirnames, filenames) 的tuple,元素依序為目前路徑、目前路徑下資料夾清單、目前路徑下檔案名稱清單。 list的.append()、.extend()和.sort()方法都是原地修改,sorted()函數不是。 將list寫入.txt檔案時需要把list轉為str,直接用str()函式強轉會很醜,用換行符號連接list每個元素會好看很多。 os.path代表系統換行符,windows下為”\r\n”,其他系統多是”\n”。然而無論是用os.path還是”\n」連接列表元素,最後用windows記事本打開都一樣換行,但是用vs code打開的話os.path會多換一行即看上去一行間一行,這裡面到底為啥有點說到,可能和Python的write機制有關,暫時不深究(留坑)。 關於文件讀寫,多數資料推薦with as形式,確實更簡潔一點。
PS:
說os.walk()暴力是因為它真的按照目錄樹遍歷了所給路徑中的所有文件夾和文件,文件量大而所要找的文件名少的情況下會慢一些(其實我覺得慢不了多少),用os.listdir()寫成遞歸函數的話執行效率可能會高一些,但是os.walk ()邏輯簡單好寫,各位隨意,我幹了! 相關推薦:以上是Python3.遍歷某資料夾提取特定檔案名稱的實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!