python提取文件名

   首先聲明本人初涉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…。

   其實到這裡我已經想到又一個問題了,如果目錄中還有目錄腫么辦?好吧,明天還要實習上班,今天先洗洗碎了,明天我再好好考慮下。