批量修改檔名

2021-09-25 12:22:31 字數 3779 閱讀 9757

這陣子修改檔名把我給弄煩了,懂不懂就要按照一定規則修改上百個檔名,在一些前輩的基礎上寫了個功能相對全面的批量修改檔名的指令碼,剛接觸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...