Python 实现文件夹内文件批量重命名工具

代码:
import os

class BatchRenameFiles:
    def __init__(self, folder_path, prefix='', suffix='', replace_dict=None, include_ext=False):
        """
        初始化文件夹批量重命名工具

        :param folder_path: 目标文件夹路径
        :param prefix: 文件名前缀
        :param suffix: 文件名后缀
        :param replace_dict: 替换规则字典,格式为 {'old_str': 'new_str'}
        :param include_ext: 是否在重命名中保留扩展名
        """
        self.folder_path = folder_path
        self.prefix = prefix
        self.suffix = suffix
        self.replace_dict = replace_dict if replace_dict else {}
        self.include_ext = include_ext

    def rename_files(self):
        """
        执行批量重命名
        """
        # 获取目标文件夹中的所有文件
        try:
            files = os.listdir(self.folder_path)
        except FileNotFoundError:
            print(f"文件夹路径 {self.folder_path} 不存在,请检查路径!")
            return

        # 遍历文件夹中的每个文件
        for file_name in files:
            old_file_path = os.path.join(self.folder_path, file_name)
            
            # 跳过文件夹,只处理文件
            if os.path.isdir(old_file_path):
                continue

            # 分离文件名与扩展名
            file_base, file_extension = os.path.splitext(file_name)

            # 替换字符串
            new_file_base = file_base
            for old_str, new_str in self.replace_dict.items():
                new_file_base = new_file_base.replace(old_str, new_str)

            # 添加前缀和后缀
            new_file_name = self.prefix + new_file_base + self.suffix

            # 保留扩展名
            if self.include_ext:
                new_file_name += file_extension

            new_file_path = os.path.join(self.folder_path, new_file_name)

            # 重命名文件
            if old_file_path != new_file_path:
                os.rename(old_file_path, new_file_path)
                print(f"文件 '{file_name}' 重命名为 '{new_file_name}'")

        print("文件重命名完成!")

# 示例使用
if __name__ == "__main__":
    # 设置文件夹路径和重命名参数
    folder_path = "example_folder"  # 替换为实际文件夹路径
    prefix = "new_"  # 文件名前缀
    suffix = "_backup"  # 文件名后缀
    replace_dict = {"old": "new", "sample": "test"}  # 替换规则
    include_ext = True  # 保留扩展名

    # 创建批量重命名工具实例并执行重命名
    renamer = BatchRenameFiles(folder_path, prefix, suffix, replace_dict, include_ext)
    renamer.rename_files()
代码说明:

本代码实现了一个批量重命名工具,可以根据给定的规则和文件夹路径批量修改文件名。支持添加前缀、后缀,替换文件名中的特定字符,并且可以选择是否保留文件扩展名。

  1. BatchRenameFiles类:这是批量重命名工具的核心类,包含初始化方法和重命名操作方法。可以通过初始化时指定需要的参数,如目标文件夹路径、文件名前后缀、替换规则以及是否保留扩展名等。

  2. rename_files方法:这个方法是执行重命名操作的主体。它遍历指定文件夹中的所有文件,并根据给定规则修改文件名。首先,会对文件名进行指定的字符串替换,然后根据需求添加前后缀,最后通过 os.rename 函数重命名文件。

  3. 使用了Python标准库os:主要用于获取文件夹中的文件列表以及执行文件重命名操作。

使用说明:
  1. 设置文件夹路径

    • 你需要指定目标文件夹的路径 folder_path,该文件夹中的文件将会被批量重命名。
  2. 添加前缀和后缀

    • 可以通过 prefixsuffix 参数,分别指定文件名前后的文本内容(例如,prefix = "new_" 将会在每个文件名的开头添加 new_)。
  3. 定义替换规则

    • 通过 replace_dict 参数,可以定义一个字典来替换文件名中的指定字符串。例如,{"old": "new"} 会将文件名中的 old 替换为 new
  4. 保留扩展名

    • include_ext 参数决定是否在重命名时保留文件扩展名。例如,如果文件是 test.txt,并且 include_ext = True,那么重命名后仍会保留 .txt 扩展名。
  5. 执行重命名

    • 执行 rename_files 方法后,工具会根据配置对文件夹内的每个文件进行重命名,并输出每个文件的重命名结果。
示例使用:
if __name__ == "__main__":
    folder_path = "example_folder"  # 文件夹路径
    prefix = "new_"  # 文件名前缀
    suffix = "_backup"  # 文件名后缀
    replace_dict = {"old": "new", "sample": "test"}  # 字符替换规则
    include_ext = True  # 是否保留扩展名

    renamer = BatchRenameFiles(folder_path, prefix, suffix, replace_dict, include_ext)
    renamer.rename_files()

示例运行结果:

假设文件夹 example_folder 中有以下文件:

  • old_sample.txt
  • old_file.pdf
  • sample_data.csv

如果我们设置了前缀 new_、后缀 _backup 和替换规则 {"old": "new", "sample": "test"},则文件会被重命名为:

  • new_test_file_backup.txt
  • new_file_backup.pdf
  • test_data_backup.csv
注意事项:
  • 文件夹路径必须是有效的,并且程序会忽略文件夹,只处理文件。
  • 重命名后,如果文件名发生变化,原文件会被替换成新文件名。
  • 如果文件已经按照重命名规则存在(即重命名后的文件名相同),程序不会重新命名该文件。
功能特点:
  • 批量处理:能够对文件夹中所有符合条件的文件进行批量重命名。
  • 灵活的重命名规则:可以根据前缀、后缀以及替换规则自定义文件名格式。
  • 扩展性:可以进一步扩展功能,例如添加日志记录、跳过特定类型的文件等。

这个批量重命名工具在日常工作中非常实用,特别是在处理大量文件时,能够帮助你快速完成文件名修改任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值