使用Python腳本一鍵重命名序列幀圖片的名稱(chēng)
前言
在開(kāi)發(fā)中,我們經(jīng)常需要使用序列幀動(dòng)畫(huà)來(lái)實(shí)現(xiàn)下拉刷新、加載動(dòng)畫(huà)、空狀態(tài)動(dòng)效等交互。設(shè)計(jì)師交付的序列幀圖片資源,命名往往各不相同:
序列幀00001.png testImage_00002.png ... testImageName_00040.png
而我們的代碼通常期望統(tǒng)一的命名規(guī)范:
modifiedImageName_00001.png modifiedImageName_00002.png ... modifiedImageName_00040.png
手動(dòng)重命名40張上百?gòu)垐D片?不僅耗時(shí),還容易出錯(cuò)。向設(shè)計(jì)師提出修改請(qǐng)求?對(duì)方可能還愛(ài)答不理的。本文將教你使用一行Python腳本,實(shí)現(xiàn)圖片的批量重命名,3秒搞定,徹底解放雙手!
一、為何需要自動(dòng)化重命名?
手動(dòng)重命名的痛點(diǎn)
- 耗時(shí)費(fèi)力:重命名40張圖片大約需要5分鐘,100張則需更久
- 易出錯(cuò):手誤改錯(cuò)一個(gè)數(shù)字,可能導(dǎo)致動(dòng)畫(huà)斷幀或顯示異常
- 不專(zhuān)業(yè):命名不統(tǒng)一會(huì)給團(tuán)隊(duì)協(xié)作和后續(xù)維護(hù)帶來(lái)混亂
- 重復(fù)勞動(dòng):每次更換主題或動(dòng)效樣式都需要重復(fù)操作
自動(dòng)化重命名的優(yōu)勢(shì)
- 高效快捷:3秒即可完成100張圖片的重命名
- 精準(zhǔn)無(wú)誤:避免人為操作導(dǎo)致的命名錯(cuò)誤
- 高度可復(fù)用:簡(jiǎn)單調(diào)整參數(shù)即可適用于不同項(xiàng)目
- 提升效率:將寶貴時(shí)間用于核心業(yè)務(wù)邏輯開(kāi)發(fā)
二、Python腳本實(shí)戰(zhàn):批量重命名序列幀圖片
項(xiàng)目結(jié)構(gòu)準(zhǔn)備
創(chuàng)建一個(gè)工作文件夾(例如命名為RenameTool),其中包含以下內(nèi)容:
RenameTool/ ├── SourceImages/ # 原始圖片文件夾 │ ├── testImageName_00001.png │ ├── testImageName_00002.png │ └── ...(共40張序列幀圖片) └── rename_images.py # Python重命名腳本
- 原始命名:
testImageName_00001.png~testImageName_00040.png - 目標(biāo)命名:
modifiedImageName_00001.png~modifiedImageName_00040.png
優(yōu)化后的Python腳本(帶詳細(xì)注釋?zhuān)?/h3>
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
序列幀動(dòng)畫(huà)圖片批量重命名工具
功能:將指定文件夾中的圖片文件按照指定規(guī)則進(jìn)行批量重命名
"""
import os
# ==================== 配置參數(shù) ====================
# 請(qǐng)根據(jù)實(shí)際情況修改以下四個(gè)參數(shù)
# 1. 原始圖片所在的文件夾路徑(相對(duì)于腳本的位置)
SOURCE_FOLDER = 'SourceImages'
# 2. 目標(biāo)保存的文件夾路徑(如果與原始文件夾相同,則為原地重命名)
TARGET_FOLDER = 'SourceImages' # 可以修改為'RenamedImages'來(lái)保存到新文件夾
# 3. 需要被替換的原始文件名前綴(區(qū)分大小寫(xiě))
OLD_PREFIX = 'testImageName_'
# 4. 替換后的新文件名前綴
NEW_PREFIX = 'modifiedImageName_'
# ==================== 主程序開(kāi)始 ====================
def main():
"""
主函數(shù):執(zhí)行批量重命名操作
"""
print("?? iOS序列幀圖片批量重命名工具")
print("=" * 50)
# 檢查源文件夾是否存在
if not os.path.exists(SOURCE_FOLDER):
print(f"? 錯(cuò)誤:源文件夾 '{SOURCE_FOLDER}' 不存在!")
print("?? 提示:請(qǐng)確保腳本與圖片文件夾在同一目錄下")
return
# 如果目標(biāo)文件夾不存在,則創(chuàng)建
if TARGET_FOLDER != SOURCE_FOLDER and not os.path.exists(TARGET_FOLDER):
os.makedirs(TARGET_FOLDER)
print(f"?? 已創(chuàng)建目標(biāo)文件夾:{TARGET_FOLDER}")
# 獲取源文件夾中所有文件,并按名稱(chēng)排序(確保序列正確)
all_files = sorted(os.listdir(SOURCE_FOLDER))
# 統(tǒng)計(jì)計(jì)數(shù)器
renamed_count = 0
skipped_count = 0
print(f"?? 正在掃描文件夾:{SOURCE_FOLDER}")
print(f"?? 找到 {len(all_files)} 個(gè)文件")
print("-" * 50)
# 遍歷文件夾中的所有文件
for filename in all_files:
# 檢查文件是否為PNG格式且以指定前綴開(kāi)頭
if filename.endswith('.png') and filename.startswith(OLD_PREFIX):
# 構(gòu)建完整的原始文件路徑
old_path = os.path.join(SOURCE_FOLDER, filename)
# 生成新文件名:替換前綴
new_filename = filename.replace(OLD_PREFIX, NEW_PREFIX, 1)
# 構(gòu)建完整的目標(biāo)文件路徑
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:
# 執(zhí)行重命名操作
os.rename(old_path, new_path)
print(f"? 已重命名:{filename} → {new_filename}")
renamed_count += 1
except FileExistsError:
print(f"?? 跳過(guò):{new_filename} 已存在,避免覆蓋")
skipped_count += 1
except PermissionError:
print(f"? 權(quán)限錯(cuò)誤:無(wú)法重命名 {filename}(文件可能被其他程序占用)")
except Exception as e:
print(f"? 錯(cuò)誤處理 {filename}: {str(e)}")
else:
# 統(tǒng)計(jì)不符合條件的文件
if filename.endswith('.png'):
print(f"? 跳過(guò):{filename}(前綴不匹配)")
else:
# 非PNG文件,靜默跳過(guò)
skipped_count += 1
# 輸出統(tǒng)計(jì)結(jié)果
print("=" * 50)
print("?? 重命名完成!")
print(f" ? 成功重命名:{renamed_count} 個(gè)文件")
print(f" ? 跳過(guò)處理:{skipped_count} 個(gè)文件")
if renamed_count > 0:
if TARGET_FOLDER == SOURCE_FOLDER:
print(f"?? 文件保存在:{SOURCE_FOLDER}(原地重命名)")
else:
print(f"?? 文件已保存至:{TARGET_FOLDER}")
print("?? 所有序列幀圖片已準(zhǔn)備就緒,可直接用于iOS項(xiàng)目!")
else:
print("?? 沒(méi)有文件被重命名,請(qǐng)檢查配置參數(shù)")
# 腳本入口點(diǎn)
if __name__ == "__main__":
main()
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
序列幀動(dòng)畫(huà)圖片批量重命名工具
功能:將指定文件夾中的圖片文件按照指定規(guī)則進(jìn)行批量重命名
"""
import os
# ==================== 配置參數(shù) ====================
# 請(qǐng)根據(jù)實(shí)際情況修改以下四個(gè)參數(shù)
# 1. 原始圖片所在的文件夾路徑(相對(duì)于腳本的位置)
SOURCE_FOLDER = 'SourceImages'
# 2. 目標(biāo)保存的文件夾路徑(如果與原始文件夾相同,則為原地重命名)
TARGET_FOLDER = 'SourceImages' # 可以修改為'RenamedImages'來(lái)保存到新文件夾
# 3. 需要被替換的原始文件名前綴(區(qū)分大小寫(xiě))
OLD_PREFIX = 'testImageName_'
# 4. 替換后的新文件名前綴
NEW_PREFIX = 'modifiedImageName_'
# ==================== 主程序開(kāi)始 ====================
def main():
"""
主函數(shù):執(zhí)行批量重命名操作
"""
print("?? iOS序列幀圖片批量重命名工具")
print("=" * 50)
# 檢查源文件夾是否存在
if not os.path.exists(SOURCE_FOLDER):
print(f"? 錯(cuò)誤:源文件夾 '{SOURCE_FOLDER}' 不存在!")
print("?? 提示:請(qǐng)確保腳本與圖片文件夾在同一目錄下")
return
# 如果目標(biāo)文件夾不存在,則創(chuàng)建
if TARGET_FOLDER != SOURCE_FOLDER and not os.path.exists(TARGET_FOLDER):
os.makedirs(TARGET_FOLDER)
print(f"?? 已創(chuàng)建目標(biāo)文件夾:{TARGET_FOLDER}")
# 獲取源文件夾中所有文件,并按名稱(chēng)排序(確保序列正確)
all_files = sorted(os.listdir(SOURCE_FOLDER))
# 統(tǒng)計(jì)計(jì)數(shù)器
renamed_count = 0
skipped_count = 0
print(f"?? 正在掃描文件夾:{SOURCE_FOLDER}")
print(f"?? 找到 {len(all_files)} 個(gè)文件")
print("-" * 50)
# 遍歷文件夾中的所有文件
for filename in all_files:
# 檢查文件是否為PNG格式且以指定前綴開(kāi)頭
if filename.endswith('.png') and filename.startswith(OLD_PREFIX):
# 構(gòu)建完整的原始文件路徑
old_path = os.path.join(SOURCE_FOLDER, filename)
# 生成新文件名:替換前綴
new_filename = filename.replace(OLD_PREFIX, NEW_PREFIX, 1)
# 構(gòu)建完整的目標(biāo)文件路徑
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:
# 執(zhí)行重命名操作
os.rename(old_path, new_path)
print(f"? 已重命名:{filename} → {new_filename}")
renamed_count += 1
except FileExistsError:
print(f"?? 跳過(guò):{new_filename} 已存在,避免覆蓋")
skipped_count += 1
except PermissionError:
print(f"? 權(quán)限錯(cuò)誤:無(wú)法重命名 {filename}(文件可能被其他程序占用)")
except Exception as e:
print(f"? 錯(cuò)誤處理 {filename}: {str(e)}")
else:
# 統(tǒng)計(jì)不符合條件的文件
if filename.endswith('.png'):
print(f"? 跳過(guò):{filename}(前綴不匹配)")
else:
# 非PNG文件,靜默跳過(guò)
skipped_count += 1
# 輸出統(tǒng)計(jì)結(jié)果
print("=" * 50)
print("?? 重命名完成!")
print(f" ? 成功重命名:{renamed_count} 個(gè)文件")
print(f" ? 跳過(guò)處理:{skipped_count} 個(gè)文件")
if renamed_count > 0:
if TARGET_FOLDER == SOURCE_FOLDER:
print(f"?? 文件保存在:{SOURCE_FOLDER}(原地重命名)")
else:
print(f"?? 文件已保存至:{TARGET_FOLDER}")
print("?? 所有序列幀圖片已準(zhǔn)備就緒,可直接用于iOS項(xiàng)目!")
else:
print("?? 沒(méi)有文件被重命名,請(qǐng)檢查配置參數(shù)")
# 腳本入口點(diǎn)
if __name__ == "__main__":
main()
三、腳本核心功能解析
1. 靈活的路徑配置
SOURCE_FOLDER = 'SourceImages' # 原始圖片文件夾 TARGET_FOLDER = 'SourceImages' # 目標(biāo)文件夾(可設(shè)置為新文件夾)
- 原地重命名:
TARGET_FOLDER = SOURCE_FOLDER - 保存到新位置:
TARGET_FOLDER = 'RenamedImages'
2. 精確的命名匹配
OLD_PREFIX = 'testImageName_' # 需要被替換的前綴 NEW_PREFIX = 'modifiedImageName_' # 新的前綴
- 支持自定義任意前綴替換
- 確保只替換第一個(gè)匹配的前綴,避免錯(cuò)誤修改
3. 完善的異常處理
- FileExistsError:目標(biāo)文件已存在時(shí)跳過(guò),避免覆蓋
- PermissionError:文件被占用時(shí)的友好提示
- 通用異常捕獲:確保腳本不會(huì)意外崩潰
4. 智能文件排序
sorted(os.listdir(SOURCE_FOLDER))
確保圖片按 00001, 00002... 的順序處理,保證動(dòng)畫(huà)序列的正確性
四、如何使用這個(gè)腳本?
步驟1:準(zhǔn)備環(huán)境
確保你的電腦已安裝Python 3.x(macOS通常已預(yù)裝)
步驟2:創(chuàng)建項(xiàng)目結(jié)構(gòu)
# 創(chuàng)建項(xiàng)目文件夾 mkdir RenameTool cd RenameTool # 創(chuàng)建原始圖片文件夾 mkdir SourceImages # 將設(shè)計(jì)師提供的序列幀圖片復(fù)制到SourceImages文件夾中 # 圖片命名應(yīng)為:testImageName_00001.png, testImageName_00002.png... # 創(chuàng)建Python腳本 touch rename_images.py
步驟3:編輯腳本并配置參數(shù)
- 使用文本編輯器打開(kāi)
rename_images.py - 粘貼上面的完整腳本代碼
- 根據(jù)需要修改頂部的四個(gè)配置參數(shù):
SOURCE_FOLDER:原始圖片文件夾名TARGET_FOLDER:目標(biāo)文件夾名OLD_PREFIX:原始文件名前綴NEW_PREFIX:新文件名前綴
步驟4:運(yùn)行腳本
# 在RenameTool目錄下執(zhí)行 python3 rename_images.py
步驟5:查看運(yùn)行結(jié)果
腳本會(huì)顯示詳細(xì)的處理過(guò)程:
?? iOS序列幀圖片批量重命名工具 ================================================== ?? 正在掃描文件夾:SourceImages ?? 找到 40 個(gè)文件 -------------------------------------------------- ? 已重命名:testImageName_00001.png → modifiedImageName_00001.png ? 已重命名:testImageName_00002.png → modifiedImageName_00002.png ... ================================================== ?? 重命名完成! ? 成功重命名:40 個(gè)文件 ? 跳過(guò)處理:0 個(gè)文件 ?? 文件保存在:SourceImages(原地重命名) ?? 所有序列幀圖片已準(zhǔn)備就緒,可直接用于iOS項(xiàng)目!
五、進(jìn)階使用技巧
1. 批量處理多個(gè)文件夾
如果需要處理多個(gè)動(dòng)畫(huà)序列,可以創(chuàng)建不同的配置塊:
# 配置組1:處理下拉刷新動(dòng)畫(huà)
configs = [
{
'source': 'PullRefreshImages',
'old_prefix': 'refresh_',
'new_prefix': 'pull_refresh_day_'
},
{
'source': 'LoadingImages',
'old_prefix': 'loading_',
'new_prefix': 'page_loading_'
}
]
# 循環(huán)處理所有配置
for config in configs:
# 調(diào)用重命名函數(shù)...
2. 添加拖拽支持(macOS)
import sys
# 通過(guò)拖拽獲取文件夾路徑
if len(sys.argv) > 1:
SOURCE_FOLDER = sys.argv[1]
print(f"?? 使用拖拽的文件夾:{SOURCE_FOLDER}")
3. 備份原始文件
import shutil
# 重命名前先復(fù)制到備份文件夾
backup_folder = f"{SOURCE_FOLDER}_backup"
if not os.path.exists(backup_folder):
shutil.copytree(SOURCE_FOLDER, backup_folder)
print(f"?? 已創(chuàng)建備份:{backup_folder}")
六、常見(jiàn)問(wèn)題解答
Q1:腳本運(yùn)行后沒(méi)有任何文件被重命名?
- 檢查
OLD_PREFIX是否與圖片實(shí)際前綴完全一致(包括大小寫(xiě)) - 確認(rèn)圖片格式是否為
.png(腳本默認(rèn)只處理PNG格式)
Q2:如何重命名其他格式的圖片?
修改腳本中的文件類(lèi)型判斷:
# 支持多種圖片格式
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
Q3:如何處理不規(guī)則命名的圖片?
# 使用正則表達(dá)式匹配更復(fù)雜的命名模式
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"
結(jié)語(yǔ)
通過(guò)這個(gè)簡(jiǎn)單的Python腳本,你可以將原本繁瑣的圖片重命名工作自動(dòng)化,節(jié)省大量時(shí)間,減少人為錯(cuò)誤。無(wú)論是處理40張還是400張序列幀圖片,都只需運(yùn)行一次腳本即可完成。
技術(shù)開(kāi)發(fā)的核心價(jià)值在于解決重復(fù)性工作,讓開(kāi)發(fā)者能夠?qū)W⒂诟刑魬?zhàn)性的任務(wù)。掌握這樣的小工具,不僅能提升個(gè)人效率,也能讓整個(gè)團(tuán)隊(duì)的開(kāi)發(fā)流程更加規(guī)范高效。
立即嘗試,告別手動(dòng)重命名的煩惱,體驗(yàn)自動(dòng)化帶來(lái)的便捷吧!
以上就是使用Python腳本一鍵重命名序列幀圖片的名稱(chēng)的詳細(xì)內(nèi)容,更多關(guān)于Python重命名序列幀圖片名稱(chēng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用Flask獲取請(qǐng)求參數(shù)的方式總結(jié)
在 Flask 中,可以從 request 對(duì)象中獲取各種類(lèi)型的參數(shù),這篇文章為大家整理了一些常見(jiàn)的獲取參數(shù)的方式及示例代碼,感興趣的小伙伴可以參考一下2025-04-04
python3實(shí)現(xiàn)讀取chrome瀏覽器cookie
這里給大家分享的是python3讀取chrome瀏覽器的cookie(CryptUnprotectData解密)的代碼,主要思路是讀取到的cookies被封裝成字典,可以直接給requests使用。2016-06-06
Python實(shí)現(xiàn)計(jì)算兩個(gè)指定日期相差幾年幾月幾日
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)計(jì)算兩個(gè)日期之間相差多少年,多少月,多少天,文中的的示例代碼講解詳細(xì),需要的可以參考下2024-02-02
python利用tkinter實(shí)現(xiàn)屏保
這篇文章主要為大家詳細(xì)介紹了python利用tkinter實(shí)現(xiàn)屏保,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
python Task在協(xié)程調(diào)用實(shí)例講解
在本篇文章里小編給大家整理了一篇關(guān)于python Task如何在協(xié)程調(diào)用的相關(guān)內(nèi)容,有興趣的朋友們可以參考下。2021-04-04
python 實(shí)現(xiàn)上傳圖片并預(yù)覽的3種方法(推薦)
下面小編就為大家?guī)?lái)一篇python 實(shí)現(xiàn)上傳圖片并預(yù)覽的3種方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
Python實(shí)現(xiàn)關(guān)鍵路徑和七格圖計(jì)算詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)關(guān)鍵路徑和七格圖計(jì)算,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-03-03

