脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - python批量修改文件名的三种方法实例

python批量修改文件名的三种方法实例

2022-12-24 14:16用余生去守护 Python

同事最近有个需求,需要批量修改文件的名称,这篇文章主要给大家介绍了关于python批量修改文件名的三种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

前言

当我们从网站爬取若干张图片,或需要将一些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…需进行排序(参考自http://www.tuohang.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"

python批量修改文件名的三种方法实例

python批量修改文件名的三种方法实例

2、批量删除指定字符段"[ * 图灵程序设计丛书 * ]."

(参考自https://blog.csdn.net/qiukui111)

python批量修改文件名的三种方法实例

python批量修改文件名的三种方法实例

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姓名和学号匹配修改图片名称;

python批量修改文件名的三种方法实例

python批量修改文件名的三种方法实例

python批量修改文件名的三种方法实例

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()

 

总结

到此这篇关于python批量修改文件名的三种方法的文章就介绍到这了,更多相关python批量修改文件名内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_45365214/article/details/121772980

延伸 · 阅读

精彩推荐