杰瑞科技汇

Python批量重命名,具体怎么操作?

告别手动重命名!Python 批量重命名文件终极指南(附代码与实战)

** 还在为电脑里成百上千个杂乱无章的文件(如“截图(1).png”、“最终版-最终版.docx”)而烦恼吗?学习使用 Python 进行批量重命名,你将掌握一项高效、自动化的文件管理神技,本文将从零开始,手把手教你如何用 Python 脚本轻松实现各种复杂的批量重命名任务,无论是添加前缀、序号,还是替换特定字符,都能一键搞定,告别重复劳动,让 Python 成为你的效率倍增器!

Python批量重命名,具体怎么操作?-图1
(图片来源网络,侵删)

为什么选择 Python 进行批量重命名?

在开始之前,我们先思考一个问题:为什么在众多工具中,要选择 Python?

  1. 极致的灵活性: 相比一些固定的批量重命名软件,Python 脚本可以做到“随心所欲”,你可以根据任何复杂的逻辑来生成新文件名,例如从文件内容中提取信息、根据修改时间命名等。
  2. 免费且强大: Python 是一门完全免费的开源语言,拥有海量的标准库和第三方库,文件操作、正则表达式等工具让重命名任务变得轻而易举。
  3. 跨平台兼容: 无论你是 Windows、macOS 还是 Linux 用户,Python 脚本都能无缝运行,一套代码,处处使用。
  4. 可重复性与自动化: 编写好的脚本可以保存下来,未来遇到类似需求时,只需稍作修改甚至直接运行即可,实现真正的“一次编写,终身受用”。

Python 批量重命名的核心武器:os 模块

Python 自带的 os 模块是与操作系统交互的“瑞士军刀”,osshutil 子模块提供了我们批量重命名所需的所有基本功能。

  • os.listdir(path): 列出指定路径下的所有文件和文件夹名。
  • os.path.join(path, filename): 安全地拼接路径和文件名,自动适配不同操作系统。
  • os.path.splitext(filename): 分离文件的扩展名,例如将 image.jpg 分离成 ('image', '.jpg')
  • os.rename(old_path, new_path): 执行重命名操作。

⚠️ 重要提示:在执行批量重命名前,强烈建议先进行备份! 一个错误的脚本可能会让你的文件“人间蒸发”。

实战案例:从简单到复杂,玩转批量重命名

我们将通过三个经典的实战案例,由浅入深地展示 Python 批量重命名的强大之处。

Python批量重命名,具体怎么操作?-图2
(图片来源网络,侵删)

给所有文件添加统一前缀(添加“我的文档_”)

场景: 你有一个文件夹,里面全是照片,但文件名很乱(如 IMG_1234.JPG, photo.png),你想给它们都加上一个统一的前缀,方便管理。

思路:

  1. 遍历目标文件夹。
  2. 对每个文件名,提取其文件名(不含路径)和扩展名。
  3. 将新前缀、原文件名和扩展名拼接起来。
  4. 使用 os.rename() 进行重命名。

代码实现 (add_prefix.py):

import os
# --- 配置区 ---
# 请将 'your_folder_path' 替换为你的文件夹路径
folder_path = r'C:\Users\YourUser\Desktop\photos_to_rename' 
prefix = '我的文档_'
# --- 配置区结束 ---
# 检查文件夹是否存在
if not os.path.isdir(folder_path):
    print(f"错误:文件夹 '{folder_path}' 不存在!")
else:
    # 遍历文件夹中的所有文件
    for filename in os.listdir(folder_path):
        # 构建完整的旧文件路径
        old_path = os.path.join(folder_path, filename)
        # 跳过子文件夹
        if not os.path.isfile(old_path):
            continue
        # 分离文件名和扩展名
        name, extension = os.path.splitext(filename)
        # 构建新的文件名
        new_filename = prefix + name + extension
        new_path = os.path.join(folder_path, new_filename)
        # 执行重命名
        try:
            os.rename(old_path, new_path)
            print(f"重命名成功: '{filename}' -> '{new_filename}'")
        except Exception as e:
            print(f"重命名 '{filename}' 失败: {e}")
    print("\n批量重命名任务完成!")

如何使用:

Python批量重命名,具体怎么操作?-图3
(图片来源网络,侵删)
  1. 将上述代码保存为 add_prefix.py
  2. 修改 folder_path 变量为你的目标文件夹路径。
  3. 在命令行中运行 python add_prefix.py

为文件添加递增序号(从 001 开始)

场景: 你下载了一堆教程文件,它们的名字是 pdf, pdf... pdf,你希望它们按顺序排列,并且序号是三位数,如 001_教程.pdf, 002_教程.pdf... 这样在文件列表中就能正确排序。

思路:

  1. 遍历文件夹,获取所有文件名。
  2. 对文件名进行排序,确保顺序正确。
  3. 使用 enumerate 循环,为每个文件生成一个从 1 开始的索引。
  4. 将格式化后的序号(如 001)、分隔符和原文件名(不含扩展名)拼接。
  5. 拼接回扩展名,并执行重命名。

代码实现 (add_sequence.py):

import os
# --- 配置区 ---
folder_path = r'C:\Users\YourUser\Desktop\tutorials'
prefix = ''
separator = '_'
start_number = 1
# --- 配置区结束 ---
if not os.path.isdir(folder_path):
    print(f"错误:文件夹 '{folder_path}' 不存在!")
else:
    # 获取所有文件名并排序
    filenames = sorted([f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))])
    for index, filename in enumerate(filenames, start=start_number):
        old_path = os.path.join(folder_path, filename)
        name, extension = os.path.splitext(filename)
        # 使用 zfill(3) 来确保序号是三位数 (e.g., 1 -> 001, 12 -> 012)
        new_filename = f"{prefix}{index:03d}{separator}{name}{extension}"
        new_path = os.path.join(folder_path, new_filename)
        try:
            os.rename(old_path, new_path)
            print(f"重命名成功: '{filename}' -> '{new_filename}'")
        except Exception as e:
            print(f"重命名 '{filename}' 失败: {e}")
    print("\n批量重命名任务完成!")

代码亮点:

  • sorted() 确保文件按名称排序。
  • enumerate(filenames, start=1) 从 1 开始计数。
  • f"{index:03d}" 是 Python 的格式化字符串,03d 表示将数字格式化为至少 3 位宽度,不足的前面补 0。

使用正则表达式进行高级替换

场景: 你的文件名中包含多余或混乱的信息,(高清版), [内部资料] 等字样,你想把它们全部去掉。

思路:

  1. 遍历文件夹。
  2. 对每个文件名,使用 re.sub() 函数和正则表达式匹配并替换掉不需要的部分。
  3. 正则表达式是处理文本模式的利器,非常强大。

代码实现 (regex_rename.py):

import os
import re
# --- 配置区 ---
folder_path = r'C:\Users\YourUser\Desktop\messy_files'
# 定义要替换的模式,这里我们去掉所有括号及其内部的内容
# r'[((][^))]*[))]' 解释:
# r'' -> 原始字符串
# [((] -> 匹配中文括号"("或英文括号"("
# [^))]* -> 匹配除")"和")"之外的任意字符,零次或多次
# [))] -> 匹配中文括号")"或英文括号")"
pattern_to_remove = r'[((][^))]*[))]'
replacement = ''
# --- 配置区结束 ---
if not os.path.isdir(folder_path):
    print(f"错误:文件夹 '{folder_path}' 不存在!")
else:
    for filename in os.listdir(folder_path):
        old_path = os.path.join(folder_path, filename)
        if not os.path.isfile(old_path):
            continue
        # 使用正则表达式进行替换
        new_filename = re.sub(pattern_to_remove, replacement, filename)
        # 如果文件名被修改了,才执行重命名
        if new_filename != filename:
            new_path = os.path.join(folder_path, new_filename)
            try:
                os.rename(old_path, new_path)
                print(f"重命名成功: '{filename}' -> '{new_filename}'")
            except Exception as e:
                print(f"重命名 '{filename}' 失败: {e}")
        else:
            print(f"文件 '{filename}' 无需修改。")
    print("\n批量重命名任务完成!")

代码亮点:

  • import re 引入正则表达式模块。
  • re.sub() 函数用于替换字符串中匹配正则表达式的部分。
  • 这个案例展示了如何用代码处理更复杂的文本规则。

高级玩法:打造你自己的图形化批量重命名工具

如果你觉得每次都要修改代码、运行脚本有点麻烦,可以更进一步,利用 Python 的 GUI 库(如 tkinterPyQt)创建一个简单的图形化界面。

一个简单的 tkinter 界面思路:

  1. 窗口布局:

    • 一个“选择文件夹”按钮。
    • 一个显示文件夹路径的文本框。
    • 几个输入框,用于输入前缀、替换规则等。
    • 一个“开始重命名”按钮。
    • 一个用于显示操作日志的文本框。
  2. 功能逻辑:

    • 点击“选择文件夹”按钮,调用 filedialog.askdirectory() 让用户选择文件夹。
    • 将选择的路径显示在文本框中。
    • 点击“开始重命名”按钮时,获取输入框中的规则,并调用我们前面写的重命名逻辑。
    • 将每一步的操作结果(成功/失败)打印到日志文本框中。

这样做后,你就有了一个属于你自己的、可定制的小工具,无需懂编程的家人朋友也能轻松使用。

总结与最佳实践

恭喜你!现在你已经掌握了使用 Python 进行批量重命名的核心技能,让我们回顾一下关键点:

  • 备份先行: 永远不要在原始数据上直接运行未经充分测试的脚本。
  • 模块是关键: osshutil 是你的好朋友。
  • 拆解问题: 将复杂的重命名需求拆解成“获取文件名 -> 处理文件名 -> 拼接新名 -> 执行操作”的步骤。
  • 正则表达式: 当涉及到复杂的文本模式匹配时,正则表达式是不可或缺的强大工具。
  • 善用资源: 遇到问题,多查阅 Python 官方文档和 Stack Overflow 等社区。

通过 python batchrename,你不仅解决了眼前的文件管理难题,更重要的是,你开启了一扇通往自动化和效率提升的大门,希望这篇文章能对你有所帮助,快去尝试用 Python 管理你的文件吧!

分享:
扫描分享到社交APP
上一篇
下一篇