批量修改文件名
程序员文章站
2022-06-14 16:40:11
...
这阵子修改文件名把我给弄烦了,懂不懂就要按照一定规则修改上百个文件名,在一些前辈的基础上写了个功能相对全面的批量修改文件名的脚本,刚接触python不久,放到博客上主要是自己电脑上的东西容易丢。请各位大神别打击热情,谢谢。
主要借鉴了heram前辈的"Python 批量修改文件名"https://www.cnblogs.com/heram/p/6086249.html
#--** 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)
上一篇: 幻读和如何防止幻读