python提取文件名
- 2020 年 1 月 7 日
- 筆記
首先聲明本人初涉python,由於是自學,而且課餘時間比較瑣碎,所以打算分主次兩條線。主的一條線是看python教程,但是這樣實在枯燥,所以又有了次的一條線,就是寫一些小程式練練手,只想總結下所得,記錄自己學習的歷程。
今天寫的小程式是提取某文檔目錄下面的文件名,文檔目錄里有".txt"".jpg"".bmp"".rm"類型的文件,計劃提取後綴名除".rm"以外的文件名並且去後綴,並且存到指定文本文檔中,主要涉及到簡單的模式匹配和文件操作。
import os filenames=os.listdir('d:\test\') out=open('names.txt','w') flag=[] for name in filenames: if '.txt'==name[-4:]: filenames[filenames.index(name)]=name[:-4] flag.append(True) elif '.jpg'==name[-4:]: filenames[filenames.index(name)]=name[:-4] flag.append(True) elif '.rm'==name[-3:]: filenames[filenames.index(name)]=name[:-3] flag.append(True) else: flag.append(False) continue for name in filenames: if flag[filenames.index(name)]: out.write(name+'n') out.close()
2中調用了OS中的函數,新建了filenames列表,存儲原始文件名。涉及到路徑問題,這裡使用的是絕對路徑,測試的文檔目錄在D盤。貌似有getcwd()方法能取得當前目錄,但是我一般為了操作方便,還是會自己設置一個好操作的路徑。
3中也可以同理把存儲的文檔設置為指定路徑,'w'表示寫操作。
4中新建了一個空列表,主要為了之後標記哪些是我們需要的文件名。
第一個循環主要是為了修改filenames列表,通過匹配filenames的每個子元素,需要的就去掉後綴存儲到filenames列表,並在相應的flag列表中標記True;不需要的就標記False。這裡的filenames.index(name)表示的是name這一項在filenames列表中的下標。name[start:end]則使用的是字元串分片,start和end分別表示起始下標和結束下標。熟悉java或者c應該知道數組中第一項下標為0,這裡python是類似的,但是python中同時也規定了最後一項下標為-1,以此向前類推。所以name[-4:]表示的是name後4個字元,然後與我們需要的後綴名進行比對。
接著使用第二個循環結合flag列表進行文檔寫操作,最後關閉文檔。python中比較蛋疼的是沒有case語句,所以只能一遍遍使用if…else…。
其實到這裡我已經想到又一個問題了,如果目錄中還有目錄腫么辦?好吧,明天還要實習上班,今天先洗洗碎了,明天我再好好考慮下。
