欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

批量修改文件名

程序员文章站 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)

相关标签: 修改文件名