第零步:問題的提出
我在網上購買了星火英語的六級晨讀美文100篇(六級早已高分飄過,不過很喜歡這些文章,買來重新品味),但是發現其文章的命名都爲01.txt或10.txt等。爲了便於檢索需要修改文件名稱。
第一步:從文件中取出文件名。
我發現txt文件的第一行爲文件名,格式爲如:Passage 3. Three Passions I Have Lived for, 後面還有幾個換行符。寫下如下代碼進行第一步修改:
import os
x = 1
while x < 101:
if x < 10:
file_name = "0"+str(x) + ".txt" #10一下則前面補零
file = open(file_name)
else:
file_name = str(x) + ".txt"
file = open(file_name)
line = file.readline()
file.close()
os.rename(file_name,line) #重命名
x = x + 1
修改後文件名如下:我發現這樣也不好,因爲文件名太長,移到window系統下出現錯誤;而且在linux下無法讀取。所以我要把前面沒有用的東西去掉只留下文章的名字。
第二步,修改文件名
代碼如下:
import re
import os
import shutil
import time
dir = "/home/leo/Documents/starfire100_2/" #文件目錄
if os.path.isdir(dir): #檢驗目錄是否有誤
print ("Directory exists!")
else:
print ("Directory not exist.")
time.sleep(5)
exit()
filelist=[]
filelist=os.listdir(dir)
#print filelist
for i in filelist:
tt_match = re.search(r'Passage\s{1,2}\d{1,3}\.?\s(.*)\n$',i) #匹配文件名,返回括號內的文章名
if tt_match:
NewFile = tt_match.group(1) #獲取匹配名存爲newfile
NewFile=i.replace(i,NewFile) # 修改
shutil.move(dir+i,dir+NewFile) #執行修改
修改後運行
ls | grep 'Passage'
還有如下條目:
去除最後一條屬於目錄所以還有三條未得到修改,不過數量不多,手動修改解決。
得到如下效果:
第四步:去除換行符replace空格
將上面的代碼修改一下以後得到如下代碼
import re
import os
import shutil
import time
#dir=raw_input("please input which Directory-Name to Rename:")
dir = "/home/leo/Documents/starfire100_2/"
if os.path.isdir(dir):
print ("Directory exists!")
else:
print ("Directory not exist.")
time.sleep(5)
exit()
filelist=[]
filelist=os.listdir(dir)
#print filelist
for i in filelist:
NewFile = i.strip('\n') #去除掉最後那個回車符
NewFile = re.sub(r'\s+','_',NewFile) #把所有的空格改爲下劃線
if NewFile[-1]=='_': #如果最後一個字符爲下劃線則去除
NewFile = NewFile[:-1] #去除最後一個下劃線
shutil.move(dir+i,dir+NewFile)
得到如下效果,總算完成了
其實最後去除空格和回車符的代碼可以加入修改文件名的代碼之中,不過這個很容易就不修改了。
後續問題
我想我的解法一定不是最優的,因爲只要找到第二個大寫字母就可以匹配出來。如果您能告訴我如何實現或者您有更好的方法請多指教,謝謝!
參考博文