用 Python 脚本一键重命名序列帧图片的名称

前言

在开发中,我们经常需要使用序列帧动画来实现下拉刷新、加载动画、空状态动效等交互。设计师交付的序列帧图片资源,命名往往各不相同:

erlang 复制代码
序列帧00001.png
testImage_00002.png
...
testImageName_00040.png

而我们的代码通常期望统一的命名规范:

erlang 复制代码
modifiedImageName_00001.png
modifiedImageName_00002.png
...
modifiedImageName_00040.png

手动重命名40张上百张图片?不仅耗时,还容易出错。向设计师提出修改请求?对方可能还爱答不理的。本文将教你使用一行Python脚本 ,实现图片的批量重命名,3秒搞定,彻底解放双手!


一、为何需要自动化重命名?

❌ 手动重命名的痛点

  • 耗时费力:重命名40张图片大约需要5分钟,100张则需更久
  • 易出错:手误改错一个数字,可能导致动画断帧或显示异常
  • 不专业:命名不统一会给团队协作和后续维护带来混乱
  • 重复劳动:每次更换主题或动效样式都需要重复操作

✅ 自动化重命名的优势

  • 高效快捷:3秒即可完成100张图片的重命名
  • 精准无误:避免人为操作导致的命名错误
  • 🔄 高度可复用:简单调整参数即可适用于不同项目
  • 🕒 提升效率:将宝贵时间用于核心业务逻辑开发

二、Python脚本实战:批量重命名序列帧图片

📁 项目结构准备

创建一个工作文件夹(例如命名为RenameTool),其中包含以下内容:

bash 复制代码
RenameTool/
├── SourceImages/                    # 原始图片文件夹
│   ├── testImageName_00001.png
│   ├── testImageName_00002.png
│   └── ...(共40张序列帧图片)
└── rename_images.py                 # Python重命名脚本
  • 原始命名testImageName_00001.png ~ testImageName_00040.png
  • 目标命名modifiedImageName_00001.png ~ modifiedImageName_00040.png

🐍 优化后的Python脚本(带详细注释)

python 复制代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
序列帧动画图片批量重命名工具
功能:将指定文件夹中的图片文件按照指定规则进行批量重命名
"""

import os

# ==================== 配置参数 ====================
# 请根据实际情况修改以下四个参数

# 1. 原始图片所在的文件夹路径(相对于脚本的位置)
SOURCE_FOLDER = 'SourceImages'

# 2. 目标保存的文件夹路径(如果与原始文件夹相同,则为原地重命名)
TARGET_FOLDER = 'SourceImages'  # 可以修改为'RenamedImages'来保存到新文件夹

# 3. 需要被替换的原始文件名前缀(区分大小写)
OLD_PREFIX = 'testImageName_'

# 4. 替换后的新文件名前缀
NEW_PREFIX = 'modifiedImageName_'

# ==================== 主程序开始 ====================

def main():
    """
    主函数:执行批量重命名操作
    """
    print("🔍 iOS序列帧图片批量重命名工具")
    print("=" * 50)
    
    # 检查源文件夹是否存在
    if not os.path.exists(SOURCE_FOLDER):
        print(f"❌ 错误:源文件夹 '{SOURCE_FOLDER}' 不存在!")
        print("💡 提示:请确保脚本与图片文件夹在同一目录下")
        return
    
    # 如果目标文件夹不存在,则创建
    if TARGET_FOLDER != SOURCE_FOLDER and not os.path.exists(TARGET_FOLDER):
        os.makedirs(TARGET_FOLDER)
        print(f"📁 已创建目标文件夹:{TARGET_FOLDER}")
    
    # 获取源文件夹中所有文件,并按名称排序(确保序列正确)
    all_files = sorted(os.listdir(SOURCE_FOLDER))
    
    # 统计计数器
    renamed_count = 0
    skipped_count = 0
    
    print(f"📂 正在扫描文件夹:{SOURCE_FOLDER}")
    print(f"📊 找到 {len(all_files)} 个文件")
    print("-" * 50)
    
    # 遍历文件夹中的所有文件
    for filename in all_files:
        # 检查文件是否为PNG格式且以指定前缀开头
        if filename.endswith('.png') and filename.startswith(OLD_PREFIX):
            
            # 构建完整的原始文件路径
            old_path = os.path.join(SOURCE_FOLDER, filename)
            
            # 生成新文件名:替换前缀
            new_filename = filename.replace(OLD_PREFIX, NEW_PREFIX, 1)
            
            # 构建完整的目标文件路径
            if TARGET_FOLDER == SOURCE_FOLDER:
                new_path = os.path.join(SOURCE_FOLDER, new_filename)
            else:
                new_path = os.path.join(TARGET_FOLDER, new_filename)
            
            try:
                # 执行重命名操作
                os.rename(old_path, new_path)
                print(f"✅ 已重命名:{filename} → {new_filename}")
                renamed_count += 1
                
            except FileExistsError:
                print(f"⚠️  跳过:{new_filename} 已存在,避免覆盖")
                skipped_count += 1
            except PermissionError:
                print(f"❌ 权限错误:无法重命名 {filename}(文件可能被其他程序占用)")
            except Exception as e:
                print(f"❌ 错误处理 {filename}: {str(e)}")
        else:
            # 统计不符合条件的文件
            if filename.endswith('.png'):
                print(f"➖ 跳过:{filename}(前缀不匹配)")
            else:
                # 非PNG文件,静默跳过
                skipped_count += 1
    
    # 输出统计结果
    print("=" * 50)
    print("📊 重命名完成!")
    print(f"   ✅ 成功重命名:{renamed_count} 个文件")
    print(f"   ➖ 跳过处理:{skipped_count} 个文件")
    
    if renamed_count > 0:
        if TARGET_FOLDER == SOURCE_FOLDER:
            print(f"📁 文件保存在:{SOURCE_FOLDER}(原地重命名)")
        else:
            print(f"📁 文件已保存至:{TARGET_FOLDER}")
        print("🎉 所有序列帧图片已准备就绪,可直接用于iOS项目!")
    else:
        print("ℹ️  没有文件被重命名,请检查配置参数")

# 脚本入口点
if __name__ == "__main__":
    main()

点击下载脚本

三、脚本核心功能解析

1. 灵活的路径配置

python 复制代码
SOURCE_FOLDER = 'SourceImages'      # 原始图片文件夹
TARGET_FOLDER = 'SourceImages'      # 目标文件夹(可设置为新文件夹)
  • 原地重命名TARGET_FOLDER = SOURCE_FOLDER
  • 保存到新位置TARGET_FOLDER = 'RenamedImages'

2. 精确的命名匹配

python 复制代码
OLD_PREFIX = 'testImageName_'       # 需要被替换的前缀
NEW_PREFIX = 'modifiedImageName_'   # 新的前缀
  • 支持自定义任意前缀替换
  • 确保只替换第一个匹配的前缀,避免错误修改

3. 完善的异常处理

  • FileExistsError:目标文件已存在时跳过,避免覆盖
  • PermissionError:文件被占用时的友好提示
  • 通用异常捕获:确保脚本不会意外崩溃

4. 智能文件排序

python 复制代码
sorted(os.listdir(SOURCE_FOLDER))

确保图片按 00001, 00002... 的顺序处理,保证动画序列的正确性


四、如何使用这个脚本?

步骤1:准备环境

确保你的电脑已安装Python 3.x(macOS通常已预装)

步骤2:创建项目结构

bash 复制代码
# 创建项目文件夹
mkdir RenameTool
cd RenameTool

# 创建原始图片文件夹
mkdir SourceImages

# 将设计师提供的序列帧图片复制到SourceImages文件夹中
# 图片命名应为:testImageName_00001.png, testImageName_00002.png...

# 创建Python脚本
touch rename_images.py

步骤3:编辑脚本并配置参数

  1. 使用文本编辑器打开rename_images.py
  2. 粘贴上面的完整脚本代码
  3. 根据需要修改顶部的四个配置参数:
    • SOURCE_FOLDER:原始图片文件夹名
    • TARGET_FOLDER:目标文件夹名
    • OLD_PREFIX:原始文件名前缀
    • NEW_PREFIX:新文件名前缀

步骤4:运行脚本

bash 复制代码
# 在RenameTool目录下执行
python3 rename_images.py

步骤5:查看运行结果

脚本会显示详细的处理过程:

markdown 复制代码
🔍 iOS序列帧图片批量重命名工具
==================================================
📂 正在扫描文件夹:SourceImages
📊 找到 40 个文件
--------------------------------------------------
✅ 已重命名:testImageName_00001.png → modifiedImageName_00001.png
✅ 已重命名:testImageName_00002.png → modifiedImageName_00002.png
...
==================================================
📊 重命名完成!
   ✅ 成功重命名:40 个文件
   ➖ 跳过处理:0 个文件
📁 文件保存在:SourceImages(原地重命名)
🎉 所有序列帧图片已准备就绪,可直接用于iOS项目!

五、进阶使用技巧

1. 批量处理多个文件夹

如果需要处理多个动画序列,可以创建不同的配置块:

python 复制代码
# 配置组1:处理下拉刷新动画
configs = [
    {
        'source': 'PullRefreshImages',
        'old_prefix': 'refresh_',
        'new_prefix': 'pull_refresh_day_'
    },
    {
        'source': 'LoadingImages', 
        'old_prefix': 'loading_',
        'new_prefix': 'page_loading_'
    }
]

# 循环处理所有配置
for config in configs:
    # 调用重命名函数...

2. 添加拖拽支持(macOS)

python 复制代码
import sys

# 通过拖拽获取文件夹路径
if len(sys.argv) > 1:
    SOURCE_FOLDER = sys.argv[1]
    print(f"📁 使用拖拽的文件夹:{SOURCE_FOLDER}")

3. 备份原始文件

python 复制代码
import shutil

# 重命名前先复制到备份文件夹
backup_folder = f"{SOURCE_FOLDER}_backup"
if not os.path.exists(backup_folder):
    shutil.copytree(SOURCE_FOLDER, backup_folder)
    print(f"📦 已创建备份:{backup_folder}")

六、常见问题解答

Q1:脚本运行后没有任何文件被重命名?

  • 检查OLD_PREFIX是否与图片实际前缀完全一致(包括大小写)
  • 确认图片格式是否为.png(脚本默认只处理PNG格式)

Q2:如何重命名其他格式的图片?

修改脚本中的文件类型判断:

python 复制代码
# 支持多种图片格式
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):

Q3:如何处理不规则命名的图片?

python 复制代码
# 使用正则表达式匹配更复杂的命名模式
import re
pattern = r'刷新_(\d{5})\.png'
match = re.match(pattern, filename)
if match:
    number = match.group(1)
    new_filename = f"refresh_animation_{number}.png"

结语

通过这个简单的Python脚本,你可以将原本繁琐的图片重命名工作自动化,节省大量时间,减少人为错误。无论是处理40张还是400张序列帧图片,都只需运行一次脚本即可完成。

技术开发的核心价值在于解决重复性工作,让开发者能够专注于更有挑战性的任务。掌握这样的小工具,不仅能提升个人效率,也能让整个团队的开发流程更加规范高效。

立即尝试,告别手动重命名的烦恼,体验自动化带来的便捷吧!

相关推荐
辰同学ovo2 小时前
Vue 2 路由指南:从入门到实战优化
前端·vue.js
小彭努力中2 小时前
1.在 Vue 3 中使用 Cesium 快速展示三维地球
前端·javascript·vue.js·#地图开发·#cesium·#vue3
一字白首2 小时前
Vue3 进阶,新特性 defineOptions/defineModel+Pinia 状态管理全解析
前端·javascript·vue.js
90后的晨仔2 小时前
🛠️ 为什么配置 ~/.ssh/config 后,Sourcetree 就能正常推送了?
前端
Sylus_sui2 小时前
Vue2 与 Vue3 数据双向绑定:区别与原理详解
前端·javascript·vue.js
ConardLi2 小时前
AI:我裂开了!现在的大模型评测究竟有多变态?
前端·人工智能·后端
这是你的玩具车吗2 小时前
能和爸妈讲明白的大模型原理
前端·人工智能·机器学习
霍理迪3 小时前
CSS文本样式
前端·css
Ashley_Amanda3 小时前
JavaScript 中 JSON 的处理方法
前端·javascript·json