批量處理文件時(shí),常需要先遍歷某個(gè)路徑提取特定條件的文件名。這篇寫一個(gè)暴力遍歷但很簡潔的方法,真的非常簡潔但是非常暴力。
例子目標(biāo)是:獲得存放遙感數(shù)據(jù)的文件夾下文件夾名以“_BAD”結(jié)尾的文件夾內(nèi)容。因?yàn)樵撐募路旨壓芏啵?月/產(chǎn)品類型/),目標(biāo)文件夾很多且存在在最后一級,手動(dòng)查看很煩。
代碼如下(知識點(diǎn)總結(jié)代碼后):
# -*- 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”結(jié)尾的文件夾名加入records records.extend(includedFiles) # 將該文件夾內(nèi)的文件名列表擴(kuò)展到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,元素依次是當(dāng)前路徑、當(dāng)前路徑下文件夾列表、當(dāng)前路徑下文件名列表。
list的.append()、.extend()和.sort()方法都是原地修改,sorted()函數(shù)不是。
將list寫入.txt文件時(shí)需要把list轉(zhuǎn)為str,直接用str()函數(shù)強(qiáng)轉(zhuǎn)會很丑,用換行符連接list每個(gè)元素會好看很多。
os.path代表系統(tǒng)換行符,windows下為”/r/n”,其他系統(tǒng)多是”/n”。然而無論是用os.path還是”/n”連接列表元素,最后用windows記事本打開都一樣換行,但是用vs code打開的話os.path會多換一行即看上去一行間一行,這里面到底為啥有點(diǎn)說到,可能和Python的write機(jī)制有關(guān),暫時(shí)不深究(留坑)。
關(guān)于文件讀寫,大多數(shù)資料推薦with as形式,確實(shí)更簡潔一點(diǎn)。
PS:
說os.walk()暴力是因?yàn)樗娴陌凑漳夸洏浔闅v了所給路徑中的所有文件夾和文件,文件量大而所要找的文件名少的情況下會慢一些(其實(shí)我覺得慢不了多少),用os.listdir()寫成遞歸函數(shù)的話執(zhí)行效率可能會高一些,但是os.walk()邏輯簡單好寫,各位隨意,我干了!
以上這篇Python3.遍歷某文件夾提取特定文件名的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持VEVB武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選