目录
前言
当我们从网站爬取若干张图片,或需要将一些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://www.jb51.net/article/247381.htm)
代码如下(示例):
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()
总结
© 版权声明
THE END
暂无评论内容