插件窝 干货文章 Python批量修改文件名案例汇总

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

文件名 strong path 文件 93    来源:    2024-10-28

前言

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

准备工作

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

示例案例

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

假设你有一个文件夹,里面存放了多个文件,你想给这些文件都添加一个前缀“new_”。

步骤一:导入必要的模块

import os

步骤二:设置文件夹路径

folder_path = 'path/to/your/folder'  # 替换为你的文件夹路径

步骤三:遍历文件夹中的文件并修改文件名

# 获取文件夹中的所有文件
file_list = os.listdir(folder_path)

# 遍历文件列表
for file_name in file_list:
    # 构造旧文件路径
    old_path = os.path.join(folder_path, file_name)
    # 构造新文件名
    new_file_name = 'new_' + file_name
    # 构造新文件路径
    new_path = os.path.join(folder_path, new_file_name)
    # 修改文件名
    os.rename(old_path, new_path)

案例二:替换文件名中的特定字符串

假设你有一批文件名中包含“old_name”,你想将这些“old_name”替换为“new_name”。

步骤一:导入必要的模块

import os

步骤二:设置文件夹路径

folder_path = 'path/to/your/folder'  # 替换为你的文件夹路径

步骤三:遍历文件夹中的文件并修改文件名

# 遍历文件夹中的所有文件
for file_name in os.listdir(folder_path):
    # 检查文件名是否包含"old_name"
    if 'old_name' in file_name:
        # 构造旧文件路径
        old_path = os.path.join(folder_path, file_name)
        # 替换文件名中的"old_name"为"new_name"
        new_file_name = file_name.replace('old_name', 'new_name')
        # 构造新文件路径
        new_path = os.path.join(folder_path, new_file_name)
        # 修改文件名
        os.rename(old_path, new_path)

案例三:按数字顺序重命名文件

假设你有一批文件名中包含数字,但这些数字是乱序的,你想将它们按数字顺序重新命名。

步骤一:导入必要的模块

import os

步骤二:设置文件夹路径

folder_path = 'path/to/your/folder'  # 替换为你的文件夹路径

步骤三:获取文件列表并按数字排序

# 获取文件夹中的所有文件
files = os.listdir(folder_path)
# 使用sorted函数和lambda表达式按文件名中的数字排序
files_sorted = sorted(files, key=lambda x: int(x.split('.')[0]))

注意:这里假设文件名由纯数字组成,且扩展名前没有其他字符。如果文件名更复杂,你可能需要调整排序逻辑。

步骤四:遍历排序后的文件列表并重命名

# 遍历排序后的文件列表
for i, file_name in enumerate(files_sorted, start=1):
    # 构造旧文件路径
    old_path = os.path.join(folder_path, file_name)
    # 构造新文件名,这里假设我们想要"file_1", "file_2"这样的格式
    new_file_name = f'file_{i}'
    # 如果原文件名包含扩展名,则需要保留
    if '.' in file_name:
        # 分离文件名和扩展名
        base_name, extension = os.path.splitext(file_name)
        # 构造包含扩展名的新文件名
        new_file_name += extension
    # 构造新文件路径
    new_path = os.path.join(folder_path, new_file_name)
    # 修改文件名
    os.rename(old_path, new_path)

案例四:使用正则表达式匹配和替换文件名

假设你有一批文件名中包含复杂的模式,如日期、网址等,你想通过正则表达式来匹配和替换这些模式。

步骤一:导入必要的模块

import os
import re

步骤二:设置文件夹路径

folder_path = 'path/to/your/folder'  # 替换为你的文件夹路径

步骤三:定义正则表达式并遍历文件夹中的文件

# 定义正则表达式,这里以匹配日期为例,格式为YYYYMMDD
pattern = r'(\d{8})'

# 遍历文件夹中的所有文件
for file_name in os.listdir(folder_path):
    # 使用正则表达式匹配文件名
    match = re.search(pattern, file_name)
    if match:
        # 构造旧文件路径
        old_path = os.path.join(folder_path, file_name)
        # 假设我们想要将日期格式从YYYYMMDD改为YYYY-MM-DD
        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:])
        # 替换文件名中的日期部分
        new_file_name = re.sub(pattern, new_date, file_name)
        # 构造新文件路径
        new_path = os.path.join(folder_path, new_file_name)
        # 修改文件名
        os.rename(old_path, new_path)

注意:上述正则表达式替换日期的例子可能不是最优解,因为它直接对匹配到的字符串进行替换,而没有考虑文件名中可能存在的其他字符。在实际应用中,你可能需要根据具体情况调整正则表达式和替换逻辑。

注意事项和扩展

  1. 安全性:在批量重命名文件时,务必确保新文件名不会导致同名文件冲突,否则可能会覆盖原有文件,造成数据丢失。可以通过先检查目标文件名是否存在来避免这种情况。

  2. 异常处理:在代码中加入异常处理逻辑,可以让你的脚本更加健壮。例如,当文件正在被使用或没有读写权限时,可能会抛出异常。

  3. 备份策略:在执行大规模重命名之前,尤其是对重要文件进行操作时,创建备份是一个好习惯。这样即使出了错,也有恢复的余地。

  4. 封装函数:为了重复利用这些逻辑,可以将重命名的逻辑封装成一个函数,便于在不同场景下调用。

  5. 版本控制:对于重要的文件操作,考虑使用版本控制系统(如Git)来追踪更改。

  6. 交互式脚本:开发一个简单的命令行界面,让用户确认重命名操作,可以增加灵活性和安全性。

通过上述案例和注意事项,你应该已经掌握了如何通过Python批量修改文件名的基本方法。在实际应用中,你可以根据具体需求调整代码逻辑,以满足不同的文件处理需求。

当然,我们可以继续深入探讨Python在批量修改文件名方面的应用,并引入一些更高级的特性和技巧。以下是一些额外的案例和考虑因素:

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

假设你有一个包含多张图片的文件夹,你希望根据每张图片的分辨率来修改文件名,使其包含宽度和高度信息。

步骤一:导入必要的模块

import os
from PIL import Image  # 需要安装Pillow库

步骤二:设置文件夹路径

folder_path = 'path/to/your/images'

步骤三:遍历文件夹中的图片文件并修改文件名

for file_name in os.listdir(folder_path):
    if file_name.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):
        # 构造图片文件路径
        file_path = os.path.join(folder_path, file_name)
        # 打开图片以获取其分辨率
        with Image.open(file_path) as img:
            width, height = img.size
        # 构造新文件名,包含分辨率信息
        new_file_name = f'{width}x{height}_{file_name}'
        # 构造新文件路径
        new_file_path = os.path.join(folder_path, new_file_name)
        # 修改文件名
        os.rename(file_path, new_file_path)

案例六:使用文件元数据修改文件名

对于某些类型的文件(如音频、视频文件),你可能希望使用其内置的元数据(如艺术家、标题等)来修改文件名。这通常需要第三方库来读取元数据。

示例:使用mutagen库修改MP3文件名

pip install mutagen

然后,你可以编写如下脚本:

import os
from mutagen.mp3 import MP3

folder_path = 'path/to/your/music'

for file_name in os.listdir(folder_path):
    if file_name.lower().endswith('.mp3'):
        file_path = os.path.join(folder_path, file_name)
        try:
            # 加载MP3文件
            audio = MP3(file_path)
            # 假设我们使用艺术家和标题作为新文件名的一部分
            artist = audio.tags['TPE1'][0] if 'TPE1' in audio.tags else 'Unknown'
            title = audio.tags['TIT2'][0] if 'TIT2' in audio.tags else 'Untitled'
            # 构造新文件名
            new_file_name = f'{artist} - {title}.mp3'
            # 构造新文件路径
            new_file_path = os.path.join(folder_path, new_file_name)
            # 修改文件名
            os.rename(file_path, new_file_path)
        except Exception as e:
            print(f"Error processing {file_name}: {e}")

注意事项和扩展

  1. 性能优化:对于包含大量文件的文件夹,批量重命名可能会消耗一些时间。考虑使用多线程或多进程来加速处理过程。

  2. 日志记录:为脚本添加日志记录功能,可以帮助你追踪处理过程中的任何错误或异常情况。

  3. 命令行参数:将文件夹路径、文件名模式等作为命令行参数传递给脚本,可以增加其灵活性和可重用性。

  4. 图形用户界面(GUI):对于非技术人员来说,图形用户界面可能更直观易用。你可以使用Tkinter、PyQt或Kivy等Python库来创建GUI应用程序。

  5. 集成到工作流:将批量重命名脚本集成到你的文件处理或数据管理工作流中,以自动化重复任务。

  6. 正则表达式进阶:深入学习正则表达式的复杂特性和用法,可以让你编写更强大、更灵活的匹配和替换逻辑。

通过不断实践和探索,你可以将Python的批量重命名功能扩展到更广泛的用例和更复杂的场景中。

以上就是Python批量修改文件名案例汇总的详细内容,更多关于Python修改文件名的资料请关注插件窝其它相关文章!