Python3.遍曆某檔案夾提取特定檔案名稱的執行個體

來源:互聯網
上載者:User
下面為大家分享一篇Python3.遍曆某檔案夾提取特定檔案名稱的執行個體,具有很好的參考價值,希望對大家有所協助。一起過來看看吧

批量處理檔案時,常需要先遍曆某個路徑提取特定條件的檔案名稱。這篇寫一個暴力遍曆但很簡潔的方法,真的非常簡潔但是非常暴力。

例子目標是:獲得存放遙感資料的檔案夾下檔案夾名以“_BAD”結尾的檔案夾內容。因為該檔案下分級很多(年/月/產品類型/),目標檔案夾很多且存在在最後一級,手動查看很煩。

代碼如下(知識點總結代碼後):

# -*- coding: utf-8 -*-"""遍曆某路徑下所有檔案夾,獲得特定檔案夾下所有檔案很暴力,真的遍曆了所有的檔案夾20180124@author: 墨大寶"""import osTARGETPATH = 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寫入.txttxtFile = open(os.path.join(TARGETPATH, '02_04_BAD.txt'), 'w')txtFile.write(os.linesep.join(records))txtFile.close()# 將排序後的records寫入.txtwith 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()邏輯簡單好寫,各位隨意,我幹了!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.