一个简单的Python自动化脚本:批量重命名图片文件(00-09 → 0-9)

Python自动化脚本:批量重命名图片文件(00-09 → 0-9)

前言

在日常开发工作中,我们经常会遇到需要批量处理文件的情况。比如今天要分享的这个场景:将一批命名格式为 00.png09.png 的图片文件,重命名为 0.png9.png。虽然手动修改10个文件看起来并不复杂,但如果未来遇到成百上千个文件,手动操作就会变得非常耗时且容易出错。本文将分享一个Python脚本,不仅能够自动完成这个重命名任务,还包含了文件备份、冲突处理等实用功能。

问题分析

需求描述

  • 源文件:00.png, 01.png, 02.png, …, 09.png
  • 目标文件:0.png, 1.png, 2.png, …, 9.png
  • 共计10个PNG格式的图片文件

潜在风险

  1. 数据丢失风险:直接重命名可能导致文件损坏或丢失
  2. 命名冲突:如果目标文件已经存在,直接重命名会覆盖原文件
  3. 操作不可逆:批量操作一旦出错,难以手动恢复

解决方案设计

基于以上分析,我们需要一个满足以下要求的脚本:

  • ✅ 自动备份原文件
  • ✅ 处理命名冲突
  • ✅ 操作前确认提示
  • ✅ 详细的执行日志

完整代码实现

import os
import shutil

def rename_files():
    # 获取当前脚本所在目录
    folder_path = os.path.dirname(os.path.abspath(__file__))
    
    # 如果需要处理其他文件夹,可以取消下面这行的注释并修改路径
    # folder_path = r"你的图片文件夹路径"
    
    print(f"正在处理文件夹: {folder_path}")
    
    # 创建备份文件夹
    backup_folder = os.path.join(folder_path, "backup")
    if not os.path.exists(backup_folder):
        os.makedirs(backup_folder)
        print(f"创建备份文件夹: {backup_folder}")
    
    success_count = 0
    
    # 遍历处理 0-9 十个文件
    for i in range(10):
        old_name = f"{i:02d}.png"  # 生成00-09格式
        new_name = f"{i}.png"       # 生成0-9格式
        
        old_path = os.path.join(folder_path, old_name)
        new_path = os.path.join(folder_path, new_name)
        
        # 检查源文件是否存在
        if os.path.exists(old_path):
            # 备份原文件
            backup_path = os.path.join(backup_folder, old_name)
            shutil.copy2(old_path, backup_path)
            print(f"已备份: {old_name}")
            
            # 处理命名冲突:如果新文件已存在,暂时移动
            if os.path.exists(new_path):
                temp_path = os.path.join(folder_path, f"temp_{new_name}")
                os.rename(new_path, temp_path)
                print(f"临时移动现有文件: {new_name} -> temp_{new_name}")
            
            # 执行重命名
            os.rename(old_path, new_path)
            print(f"重命名成功: {old_name} -> {new_name}")
            success_count += 1
        else:
            print(f"文件不存在: {old_name}")
    
    print(f"\n操作完成!成功重命名 {success_count} 个文件")
    print(f"原文件已备份到: {backup_folder}")

if __name__ == "__main__":
    # 操作确认
    print("此脚本将重命名 00.png 到 09.png 为 0.png 到 9.png")
    response = input("是否继续?(y/n): ")
    
    if response.lower() == 'y':
        rename_files()
    else:
        print("操作已取消")

代码详解

1. 导入必要模块

  • os:提供文件路径操作和重命名功能
  • shutil:用于文件复制备份

2. 获取目标文件夹路径

folder_path = os.path.dirname(os.path.abspath(__file__))

这行代码自动获取脚本所在目录,避免了硬编码路径的麻烦。

3. 创建备份机制

backup_folder = os.path.join(folder_path, "backup")
if not os.path.exists(backup_folder):
    os.makedirs(backup_folder)

在操作前创建 backup 文件夹,确保所有原文件都有备份。

4. 文件名格式化技巧

old_name = f"{i:02d}.png"  # 输出:00, 01, 02...
new_name = f"{i}.png"       # 输出:0, 1, 2...

使用 Python 的 f-string 格式化,:02d 表示整数占2位,不足补0。

5. 冲突处理策略

当发现目标文件已存在时,脚本会先将现有文件临时重命名为 temp_文件名,避免被覆盖。

6. 安全确认机制

脚本运行前会要求用户确认,防止误操作。

使用方法

  1. 保存脚本:将代码保存为 rename_images.py
  2. 放置文件:将脚本放在包含图片的文件夹中
  3. 运行脚本:在终端执行 python rename_images.py
  4. 确认操作:输入 y 确认执行

运行效果示例

此脚本将重命名 00.png 到 09.png 为 0.png 到 9.png
是否继续?(y/n): y
正在处理文件夹: D:\Projects\images
创建备份文件夹: D:\Projects\images\backup
已备份: 00.png
重命名成功: 00.png -> 0.png
已备份: 01.png
临时移动现有文件: 1.png -> temp_1.png
重命名成功: 01.png -> 1.png
...
操作完成!成功重命名 10 个文件
原文件已备份到: D:\Projects\images\backup

扩展应用

这个脚本的核心逻辑可以轻松扩展到其他场景:

1. 处理其他文件类型

# 修改文件扩展名
extension = ".jpg"  # 或 .txt, .docx 等
old_name = f"{i:02d}{extension}"
new_name = f"{i}{extension}"

2. 处理更多文件

# 处理 000-999 共1000个文件
for i in range(1000):
    old_name = f"{i:03d}.png"  # 000, 001, 002...

3. 自定义命名规则

# 添加前缀或后缀
new_name = f"image_{i}.png"  # image_0, image_1...

总结

通过这个简单的脚本,我们不仅解决了眼前的文件重命名需求,还建立了一个可复用的批量文件处理模板。这个脚本体现了编程思维中的重要原则:

  • 自动化:用代码代替重复的手工操作
  • 安全性:备份和冲突处理机制
  • 用户体验:操作确认和详细日志

希望这个脚本对你有帮助!如果你有类似的批量处理需求,欢迎在评论区讨论交流。


完整代码已上传,可以直接复制使用。如果觉得有用,欢迎点赞收藏! 🚀


注:本文为原创技术博客,转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值