我在大一的時候就對python非常感興趣,就是一直沒有時間和機會去學習下,只是了解些表面的東西,今天早上整理電腦的時候發現文件夾里面的文件名是這樣子的,有點小不舒服,特別想去除重復的“Struts2”的字樣
我知道windows下直接用命令行就能重命名所有文件,網上也有很多方便的重命名軟件,記得在Mac下用過一個軟件叫NameChanger,特別好用。可是今天我確一點都不想用這些軟件,因為我想自己編程實現我想要的重命名功能。
使用python實現這個應該很簡單的,我想會在10行以內就能完成吧。記得我大一的時候有用過C語言做過文件管理,那時候最擔心的就是指針的問題了,python讓我都感覺不到指針的存在。
我開始的思路是使用正則來找出我要的文件然后替換關鍵字,后來發現正則有點牛刀小用了,就直接使用python的字符串操作來實現了。
我有兩個想法:
第一個是不使用函數,用一個for循環來解決,這樣的話代碼量將會最少。
結果讓我很驚訝python的實力了,真的代碼就只有10行!!!有點不敢相信啊,呵呵
import os path = 'D:\\baiduyundownload\\struts2' keyword = '_Struts2_' rekeyword = '_' all_files = os.listdir(path) for filename in all_files: if os.path.isfile(path + '\\' + filename) and filename.find(keyword) != -1: os.rename(path + '\\' + filename,path+'\\'+filename.replace(keyword, rekeyword, 1))
第二的想法就是包裝成函數,分步來實現,
1. 得到帶有關鍵字文件名數組:findFiles(path, keyword)
2. 得到一個替換關鍵字后的文件名數組:replaceKeyword(files, keyword, rekeyword)
3. 根據前兩個數組重命名文件:renameFiles(files, refiles, path)
當然我還增加了異常捕獲提醒,總共代碼下來就翻了4倍了,呵呵
import os path = 'D:\\baiduyundownload\\struts2' keyword = '_Struts2_' rekeyword = '_' def getPath(path): if path.strip() != '': try: os.chdir(path) except os.error: print(path + ": No such dir...") else: path = os.getcwd() return path def findFiles(path, keyword): all_files = os.listdir(path) files = [] for filename in all_files: if os.path.isfile(path + '\\' + filename) and filename.find(keyword) != -1: files.append(filename) return files def replaceKeyword(files, keyword, rekeyword): refiles = [] for filename in files: refiles.append(filename.replace(keyword, rekeyword, 1)) return refiles def renameFiles(files, refiles, path): for i in range(len(files)): try: os.rename(path+'\\'+files[i],path+'\\'+refiles[i]); except os.error: print(path+'\\'+files[i] + ': wrong') path = getPath(path) files = findFiles(path, keyword) refiles = replaceKeyword(files, keyword, rekeyword) renameFiles(files, refiles, path)
兩個想法的最后實現效果是一致的啦:
去除重復的字符是不是看着很舒服啊,哈哈,我覺得實現的過程更是一種享受。越來越喜歡python了!!!