翼度科技»论坛 编程开发 python 查看内容

Python批量修改文件名案例汇总

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
前言

在文件管理和数据处理中,批量修改文件名是一项常见且重要的任务。Python作为一种功能强大的编程语言,提供了丰富的库和工具来简化这一过程。本文将结合实际案例,详细介绍如何通过Python批量修改文件名,涵盖多种常见需求,如添加前缀、替换特定字符串、按数字排序重命名等。

准备工作

在开始之前,请确保你的计算机上已安装Python环境。Python的官方网站(https://www.python.org/)提供了安装包的下载和安装指南。此外,我们将主要使用Python的
  1. os
复制代码
模块来处理文件和目录,以及
  1. re
复制代码
模块来进行正则表达式匹配和替换。

示例案例


案例一:给所有文件添加前缀

假设你有一个文件夹,里面存放了多个文件,你想给这些文件都添加一个前缀“new_”。
步骤一:导入必要的模块
  1. import os
复制代码
步骤二:设置文件夹路径
  1. folder_path = 'path/to/your/folder'  # 替换为你的文件夹路径
复制代码
步骤三:遍历文件夹中的文件并修改文件名
  1. # 获取文件夹中的所有文件
  2. file_list = os.listdir(folder_path)

  3. # 遍历文件列表
  4. for file_name in file_list:
  5.     # 构造旧文件路径
  6.     old_path = os.path.join(folder_path, file_name)
  7.     # 构造新文件名
  8.     new_file_name = 'new_' + file_name
  9.     # 构造新文件路径
  10.     new_path = os.path.join(folder_path, new_file_name)
  11.     # 修改文件名
  12.     os.rename(old_path, new_path)
复制代码
案例二:替换文件名中的特定字符串

假设你有一批文件名中包含“old_name”,你想将这些“old_name”替换为“new_name”。
步骤一:导入必要的模块
  1. import os
复制代码
步骤二:设置文件夹路径
  1. folder_path = 'path/to/your/folder'  # 替换为你的文件夹路径
复制代码
步骤三:遍历文件夹中的文件并修改文件名
  1. # 遍历文件夹中的所有文件
  2. for file_name in os.listdir(folder_path):
  3.     # 检查文件名是否包含"old_name"
  4.     if 'old_name' in file_name:
  5.         # 构造旧文件路径
  6.         old_path = os.path.join(folder_path, file_name)
  7.         # 替换文件名中的"old_name"为"new_name"
  8.         new_file_name = file_name.replace('old_name', 'new_name')
  9.         # 构造新文件路径
  10.         new_path = os.path.join(folder_path, new_file_name)
  11.         # 修改文件名
  12.         os.rename(old_path, new_path)
复制代码
案例三:按数字顺序重命名文件

假设你有一批文件名中包含数字,但这些数字是乱序的,你想将它们按数字顺序重新命名。
步骤一:导入必要的模块
  1. import os
复制代码
步骤二:设置文件夹路径
  1. folder_path = 'path/to/your/folder'  # 替换为你的文件夹路径
复制代码
步骤三:获取文件列表并按数字排序
  1. # 获取文件夹中的所有文件
  2. files = os.listdir(folder_path)
  3. # 使用sorted函数和lambda表达式按文件名中的数字排序
  4. files_sorted = sorted(files, key=lambda x: int(x.split('.')[0]))
复制代码
注意:这里假设文件名由纯数字组成,且扩展名前没有其他字符。如果文件名更复杂,你可能需要调整排序逻辑。
步骤四:遍历排序后的文件列表并重命名
  1. # 遍历排序后的文件列表
  2. for i, file_name in enumerate(files_sorted, start=1):
  3.     # 构造旧文件路径
  4.     old_path = os.path.join(folder_path, file_name)
  5.     # 构造新文件名,这里假设我们想要"file_1", "file_2"这样的格式
  6.     new_file_name = f'file_{i}'
  7.     # 如果原文件名包含扩展名,则需要保留
  8.     if '.' in file_name:
  9.         # 分离文件名和扩展名
  10.         base_name, extension = os.path.splitext(file_name)
  11.         # 构造包含扩展名的新文件名
  12.         new_file_name += extension
  13.     # 构造新文件路径
  14.     new_path = os.path.join(folder_path, new_file_name)
  15.     # 修改文件名
  16.     os.rename(old_path, new_path)
复制代码
案例四:使用正则表达式匹配和替换文件名

假设你有一批文件名中包含复杂的模式,如日期、网址等,你想通过正则表达式来匹配和替换这些模式。
步骤一:导入必要的模块
  1. import os
  2. import re
复制代码
步骤二:设置文件夹路径
  1. folder_path = 'path/to/your/folder'  # 替换为你的文件夹路径
复制代码
步骤三:定义正则表达式并遍历文件夹中的文件
  1. # 定义正则表达式,这里以匹配日期为例,格式为YYYYMMDD
  2. pattern = r'(\d{8})'

  3. # 遍历文件夹中的所有文件
  4. for file_name in os.listdir(folder_path):
  5.     # 使用正则表达式匹配文件名
  6.     match = re.search(pattern, file_name)
  7.     if match:
  8.         # 构造旧文件路径
  9.         old_path = os.path.join(folder_path, file_name)
  10.         # 假设我们想要将日期格式从YYYYMMDD改为YYYY-MM-DD
  11.         new_date = match.group(0).replace(match.group(0)[4:6], '-' + match.group(0)[4:6]).replace(match.group(0)[6:], '-' + match.group(0)[6:])
  12.         # 替换文件名中的日期部分
  13.         new_file_name = re.sub(pattern, new_date, file_name)
  14.         # 构造新文件路径
  15.         new_path = os.path.join(folder_path, new_file_name)
  16.         # 修改文件名
  17.         os.rename(old_path, new_path)
复制代码
注意:上述正则表达式替换日期的例子可能不是最优解,因为它直接对匹配到的字符串进行替换,而没有考虑文件名中可能存在的其他字符。在实际应用中,你可能需要根据具体情况调整正则表达式和替换逻辑。


注意事项和扩展


  • 安全性:在批量重命名文件时,务必确保新文件名不会导致同名文件冲突,否则可能会覆盖原有文件,造成数据丢失。可以通过先检查目标文件名是否存在来避免这种情况。
  • 异常处理:在代码中加入异常处理逻辑,可以让你的脚本更加健壮。例如,当文件正在被使用或没有读写权限时,可能会抛出异常。
  • 备份策略:在执行大规模重命名之前,尤其是对重要文件进行操作时,创建备份是一个好习惯。这样即使出了错,也有恢复的余地。
  • 封装函数:为了重复利用这些逻辑,可以将重命名的逻辑封装成一个函数,便于在不同场景下调用。
  • 版本控制:对于重要的文件操作,考虑使用版本控制系统(如Git)来追踪更改。
  • 交互式脚本:开发一个简单的命令行界面,让用户确认重命名操作,可以增加灵活性和安全性。
通过上述案例和注意事项,你应该已经掌握了如何通过Python批量修改文件名的基本方法。在实际应用中,你可以根据具体需求调整代码逻辑,以满足不同的文件处理需求。
当然,我们可以继续深入探讨Python在批量修改文件名方面的应用,并引入一些更高级的特性和技巧。以下是一些额外的案例和考虑因素:

案例五:批量修改图片文件名以包含其分辨率

假设你有一个包含多张图片的文件夹,你希望根据每张图片的分辨率来修改文件名,使其包含宽度和高度信息。
步骤一:导入必要的模块
  1. import os
  2. from PIL import Image  # 需要安装Pillow库
复制代码
步骤二:设置文件夹路径
  1. folder_path = 'path/to/your/images'
复制代码
步骤三:遍历文件夹中的图片文件并修改文件名
  1. for file_name in os.listdir(folder_path):
  2.     if file_name.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):
  3.         # 构造图片文件路径
  4.         file_path = os.path.join(folder_path, file_name)
  5.         # 打开图片以获取其分辨率
  6.         with Image.open(file_path) as img:
  7.             width, height = img.size
  8.         # 构造新文件名,包含分辨率信息
  9.         new_file_name = f'{width}x{height}_{file_name}'
  10.         # 构造新文件路径
  11.         new_file_path = os.path.join(folder_path, new_file_name)
  12.         # 修改文件名
  13.         os.rename(file_path, new_file_path)
复制代码
案例六:使用文件元数据修改文件名

对于某些类型的文件(如音频、视频文件),你可能希望使用其内置的元数据(如艺术家、标题等)来修改文件名。这通常需要第三方库来读取元数据。
示例:使用
  1. mutagen
复制代码
库修改MP3文件名
  1. pip install mutagen
复制代码
然后,你可以编写如下脚本:
  1. import os
  2. from mutagen.mp3 import MP3

  3. folder_path = 'path/to/your/music'

  4. for file_name in os.listdir(folder_path):
  5.     if file_name.lower().endswith('.mp3'):
  6.         file_path = os.path.join(folder_path, file_name)
  7.         try:
  8.             # 加载MP3文件
  9.             audio = MP3(file_path)
  10.             # 假设我们使用艺术家和标题作为新文件名的一部分
  11.             artist = audio.tags['TPE1'][0] if 'TPE1' in audio.tags else 'Unknown'
  12.             title = audio.tags['TIT2'][0] if 'TIT2' in audio.tags else 'Untitled'
  13.             # 构造新文件名
  14.             new_file_name = f'{artist} - {title}.mp3'
  15.             # 构造新文件路径
  16.             new_file_path = os.path.join(folder_path, new_file_name)
  17.             # 修改文件名
  18.             os.rename(file_path, new_file_path)
  19.         except Exception as e:
  20.             print(f"Error processing {file_name}: {e}")
复制代码
注意事项和扩展


  • 性能优化:对于包含大量文件的文件夹,批量重命名可能会消耗一些时间。考虑使用多线程或多进程来加速处理过程。
  • 日志记录:为脚本添加日志记录功能,可以帮助你追踪处理过程中的任何错误或异常情况。
  • 命令行参数:将文件夹路径、文件名模式等作为命令行参数传递给脚本,可以增加其灵活性和可重用性。
  • 图形用户界面(GUI):对于非技术人员来说,图形用户界面可能更直观易用。你可以使用Tkinter、PyQt或Kivy等Python库来创建GUI应用程序。
  • 集成到工作流:将批量重命名脚本集成到你的文件处理或数据管理工作流中,以自动化重复任务。
  • 正则表达式进阶:深入学习正则表达式的复杂特性和用法,可以让你编写更强大、更灵活的匹配和替换逻辑。
通过不断实践和探索,你可以将Python的批量重命名功能扩展到更广泛的用例和更复杂的场景中。
以上就是Python批量修改文件名案例汇总的详细内容,更多关于Python修改文件名的资料请关注脚本之家其它相关文章!

来源:https://www.jb51.net/python/326689on6.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具