python批量修改文件名
用余生去守护 人气:0前言
当我们从网站爬取若干张图片,或需要将一些txt、excel、jpg等大批量的文件修改为有规律的名称,方便整理。
提示:以下是本篇文章正文内容,下面案例可供参考
一、python批量修改文件名
提示:待修改的文件夹下只能包含需要修改的文件,然后更改源码里面的路径即可。
1.源码
代码如下(示例):
#批量修改文件名 #批量修改图片文件名 import os import re import sys def renameall(): fileList = os.listdir(r"E:\py\python3.7\test\test17") #待修改文件夹 print("修改前:"+str(fileList)) #输出文件夹中包含的文件 currentpath = os.getcwd() #得到进程当前工作目录 os.chdir(r"E:\py\python3.7\test\test17") #将当前工作目录修改为待修改文件夹的位置 num=1 #名称变量 for fileName in fileList: #遍历文件夹中所有文件 pat=".+\.(jpg|png|gif|py|txt)" #匹配文件名正则表达式 pattern = re.findall(pat,fileName) #进行匹配 os.rename(fileName,(str(num)+'.'+pattern[0])) #文件重新命名 num = num+1 #改变编号,继续下一项 print("---------------------------------------------------") os.chdir(currentpath) #改回程序运行前的工作目录 sys.stdin.flush() #刷新 print("修改后:"+str(os.listdir(r"E:\py\python3.7\test\test17"))) #输出修改后文件夹中包含的文件 renameall()
二、python批量修改文件名(按顺序)
1.源码
提示:使用os.listdir出现乱序,即修改文件名的时候不按照文件排列的顺序,例如os.listdir排列的顺序是按照例如:1,10,11,2,20,21…的顺序,想得到的正常顺序:1,2,3,4,5…需进行排序(参考自https:)
代码如下(示例):
import os #设定文件路径 path=r'E:\py\python3.7\test\test19\excel' #获取该目录下所有文件,存入列表中 fileList=os.listdir(path) #get_key是sotred函数用来比较的元素,该处用lambda表达式替代函数。 get_key = lambda i : int(i.split('.')[0]) new_sort = sorted(fileList, key=get_key) #print(fileList, '\n', new_sort) n = 0 for i in fileList: # 设置旧文件名(就是路径+文件名) oldname = path + os.sep + new_sort[n] # os.sep添加系统分隔符 # 设置新文件名 newname = path + os.sep + 'p' + str(n + 1)+'.csv' os.rename(oldname, newname) # 用os模块中的rename方法对文件改名 print(oldname, '======>', newname) n += 1
三、python批量修改文件名(删除指定字符)
1、批量删除指定字符段"-汇总数据-20211123"
2、批量删除指定字符段"[ * 图灵程序设计丛书 * ]."
(参考自https://blog.csdn.net/qiukui111)
1.源码
代码如下(示例):
import os import re import time """对指定目录下的所有文件进行有选择的修改名称""" def ReFileName(dirPath,pattern): """ :param dirPath: 文件夹路径 :param pattern: 正则匹配模式 :return: """ # 对目录下的文件进行遍历 for file in os.listdir(dirPath): # 判断是否是文件 if os.path.isfile(os.path.join(dirPath, file)) == True: # 用正则匹配,去掉不需要的词 newName = re.sub(pattern, "", file) # 设置新文件名 newFilename = file.replace(file, newName) # 重命名 os.rename(os.path.join(dirPath, file), os.path.join(dirPath, newFilename)) print("文件名已统一修改成功") if __name__ == '__main__': timeStart = time.time() dirPath = r"E:\py\python3.7\test\test19\excel1" # pattern = re.compile(r'\[{1}(.+)]\.') pattern = re.compile(r'\-汇{1}(.+)3') ReFileName(dirPath,pattern) timeEnd = time.time() print("程序走了%d秒"%(timeEnd-timeStart))
四、python批量修改文件名(按excel给定格式)
1、批量按照excel姓名和学号匹配修改图片名称;
1.源码
代码如下(示例):
import os import xlwings as wx def listdir(path, list_name): #传入存储的list for file in os.listdir(path): # 排除临时的文件 if '~$' in file: continue # 取得照片清单 if ".jpg" in file: file_path = os.path.join(path,file) list_name.append(file_path) # 取得excel文件 if ".xlsx" in file: index_file = os.path.join(path,file) print("数据源文件-->"+index_file) print(list_name) return index_file def getinfo(new_name,index_file): # 获取人员姓名和编号 app = wx.App(visible=False, add_book=False) # 不打开baiexcel print("读取人员信息--->"+index_file) wb = app.books.open(index_file) sheet = wb.sheets[0] nrows = sheet.used_range.last_cell.row #获取最大行数 ncolumns = sheet.used_range.last_cell.column #获取最大列数 # 查找姓名和编号的列 file_name = "" empl_name = "" empl_numb = "" ename_col = 0 enumb_col = 0 print("最大列数--->"+str(ncolumns)) for col in range(1, ncolumns+1): if sheet.range((1,col)).value == "姓名": ename_col = col print("姓名的列--->"+str(col)) if sheet.range((1,col)).value == "学号": enumb_col = col print("员工号的列--->"+str(col)) # 取行中的姓名和编号 for row in range(2,nrows+1): empl_name = str(sheet.range((row,ename_col)).value) empl_numb = str(sheet.range((row,enumb_col)).value) file_name = (empl_name + empl_numb).split('.')[0] # 新的名字 print(file_name) new_name.append(file_name) print(new_name) wb.close() app.quit() def change_name(file_path,new_name,list_name): # 逐个处理照片 for filename in list_name: print("旧文件名"+filename) old_name = (os.path.basename(filename)).split('.')[0] # 查找新名字清单中是否有此姓名 for nfile in new_name: if old_name in nfile: nfname = file_path+os.sep+nfile+".jpg" print("新文件名"+nfname) os.rename(filename,nfname) break def main(): file_path = input('输入文件夹路径:') # 文件夹位置 try: #读取文件夹下的所有文件 List_files=[] index_file = listdir(file_path,List_files) # 读取员工姓名和员工号,组成新的文件名 new_name=[] getinfo(new_name,index_file) # 修改文件名字 change_name(file_path,new_name,List_files) except Exception as e: # 打印异常信息 print(e) if __name__ == '__main__': main()
总结
加载全部内容