這陣子修改檔名把我給弄煩了,懂不懂就要按照一定規則修改上百個檔名,在一些前輩的基礎上寫了個功能相對全面的批量修改檔名的指令碼,剛接觸python不久,放到部落格上主要是自己電腦上的東西容易丟。請各位大神別打擊熱情,謝謝。
主要借鑑了heram前輩的"python 批量修改檔名"
#--** coding ="utf-8" **--
# rename files
# author:yujian dai time:2019-07-23
import os
import re
import sys
# 1)parameter setting
# 資料夾路徑
path = u'e:\\temporary folder\\'
# 檔名固定部分
newname = u'linedrawing'
# 檔名中待修改舊字
oldword ='_na'
# 目標新詞
newword =''
# 儲存新舊檔名列表的文件位置,檔案格式應為txt。
list_path = u'e:\\word1.txt'
# 2)
# 修改方式1:固定部分(指定格式)+序號/在原有檔案基礎上新增內容
# path為資料夾路徑,newname為檔名固定部分,i為序號開始數字,預設為1
def renamebynumber(path,newname,i=1):
# 獲取path目錄下的所有檔名和目錄名
filenames = os.listdir(path)
for filename in filenames:
# 判斷是檔案還是目錄
if os.path.isdir(os.path.join(path,filename)):
continue
# 獲取檔案字尾名(如:png)
filetype = filename.rsplit('.', 1)[1]
# 判斷檔名中是否包含某詞
if filename.find('photo') > -1:
# 修改檔名
os.rename(os.path.join(path,filename),os.path.join(path,'r_ani_'+newname+str(i).zfill(2)+'.'+filetype))
i+=1
else:
continue
print(u'完成。')
# 修改方式2:部分修改檔名(指定替換檔名部分內容)
# path為資料夾路徑,oldword為原檔名中指定替換內容,這部分內容將被替換成newword
def renamebyword(path,oldword,newword):
# 獲取path目錄下的所有檔名和目錄名
filenames = os.listdir(path)
for filename in filenames:
# 判斷是檔案還是目錄
if os.path.isdir(os.path.join(path,filename)):
continue
# 獲取檔案字尾名(如:png)
filetype = filename.rsplit('.', 1)[1]
# 將檔名中的oldword替換為newword
newfilename = filename.replace(oldword,newword)
# 修改檔名
os.rename(os.path.join(path,filename),os.path.join(path,newfilename))
print(u'完成。')
# 修改方式3:指定文字為檔名(按工作表對應命名)
# path為資料夾路徑,list_path為工作表絕對路徑
def renamebylist(path,list_path):
# 獲取path目錄下的所有檔名和目錄名
filenames = os.listdir(path)
# 開啟工作表作為list_of_filenames物件,注意文字編碼方式為'utf-8'
list_of_filenames = open(list_path,'r',encoding='utf-8')
# 逐行讀取工作表內容,儲存為lines字串列表
lines = list_of_filenames.readlines()
# 關閉工作表檔案
list_of_filenames.close()
# 去除工作表讀取時第一行會出現的'\ufeff'字串
lines[0]=lines[0].encode('utf-8').decode('utf-8-sig')
# 建立乙個空字典,用於儲存工作表內容,oldname為鍵,newname,為值
dic_of_filenames = {}
for i in range(len(lines)):
lines[i] = lines[i].replace('\n','')# 去除換行符
for line in lines:
# 工作表的第一列為oldname,第二列為newname
[oldname,newname] = [line.split('\t',1)[0],line.split('\t',1)[1]]
# 儲存工作表內容,oldname為鍵,newname,為值
dic_of_filenames[oldname] = newname
for filename in filenames:
# 獲取檔案字尾名(如:png)
filetype = filename.rsplit('.', 1)[1]
# 獲取不包含字尾的檔名,用於在字典中查詢
purefilename = filename.rsplit('.', 1)[0]
if purefilename in list(dic_of_filenames.keys()):
# 修改檔名
os.rename(os.path.join(path,filename),os.path.join(path,dic_of_filenames[purefilename]+'.'+filetype))
i+=1
else:
continue
print(u'完成。')
# 輔助函式,讀取指定目錄下所有檔名,並以列表的格式將不包含字尾的檔名輸出txt檔案
def readfilenamse(path,list_path):
# 獲取path目錄下的所有檔名和目錄名
filenames = os.listdir(path)
list_of_filenames = open(list_path,'w',encoding='utf-8')
for filename in filenames:
# 獲取不包含字尾的檔名
purefilename = filename.rsplit('.', 1)[0]
list_of_filenames.write(purefilename+'\n')
list_of_filenames.close()
# 批量修改指定目錄下的檔名
#renamebynumber(path,newname,i=1)
#renamebyword(path,oldword,newword)
#renamebylist(path,list_path)
readfilenamse(path,list_path)
批量修改檔名
10.1整理女兒 的時候,發現從老婆手機拍出來的 檔名不帶拍照日期的,這樣有個問題,就是那麼積累了2年的 無法顯眼的知道是什麼時候拍的,而且在轉移 的時候,容易把修改日期更改掉,這樣就會丟失拍照的日期,對後續回憶 的時候就不知道當時女兒多大。如果手工修改,那麼幾千張 修改工作量實在太大,以修改一張 ...
批量修改檔名
批量修改檔案字尾 include include include includeint main else char newname 1024 fgets oldname,1024,fp int length strlen oldname 把讀到字串最後的回車 換成 0 表示字串的結束標示 oldn...
批量修改檔名
ren命令可用於修改檔案的名稱,包括字尾名。比如,將d盤中的1.jpg重新命名為2.png,只需在命令提示符中輸入下面的命令,然後回車即可。注意,如果提示許可權不足,那麼你需要以管理員身份執行命令提示符。如果要批量修改字尾名,可借助萬用字元來實現。比如將d盤中的所有檔案字尾名改為jpg的命令為 re...