Python實現(xiàn)文件批量重命名器
前言
在日常工作和學習中,我們經(jīng)常需要對大量文件進行重命名操作。手動一個個修改既耗時又容易出錯,特別是當文件數(shù)量較多時。本文將介紹一個使用Python開發(fā)的文件批量重命名工具,它提供了多種重命名模式,可以大大提高文件管理效率。
功能特點
多種重命名模式:前綴添加、后綴添加、字符串替換、序列號命名
交互式操作界面:清晰的提示和引導
安全機制:操作前確認、沖突檢測、錯誤處理
靈活配置:可自定義序列號格式、起始值和分隔符
模塊化設(shè)計
本工具采用模塊化設(shè)計,將不同功能拆分為獨立函數(shù),提高代碼可讀性和可維護性。下面我們來逐一了解各個模塊的實現(xiàn)。
1.目錄路徑獲取模塊
import os
def get_directory():
"""獲取用戶輸入的有效目錄路徑"""
while True:
dir_path = input("請輸入要處理的目錄路徑:").strip()
if os.path.isdir(dir_path):
return os.path.normpath(dir_path)
print("× 目錄不存在,請重新輸入")
2.文件列表獲取模塊
import os
def list_files(dir_path):
"""列出目錄中的所有文件并返回列表"""
files = [f for f in sorted(os.listdir(dir_path))
if os.path.isfile(os.path.join(dir_path, f))]
print("\n目錄文件列表:")
for idx, f in enumerate(files, 1):
print(f"{idx:02d}. {f}")
return files
3.重命名模式選擇模塊
def get_rename_mode():
"""獲取用戶選擇的命名模式"""
print("\n請選擇重命名模式:")
print("1. 添加前綴\t2. 添加后綴")
print("3. 替換字符串\t4. 序列號")
while True:
mode = input("請輸入選項 (1-4):").strip()
if mode in {'1', '2', '3', '4'}:
return mode
print("× 無效輸入,請重新選擇")
4.序列號參數(shù)配置模塊
def get_sequence_params():
"""獲取序列號模式參數(shù)"""
print("\n序列號模式參數(shù)設(shè)置:")
try:
start = int(input("起始數(shù)字 (默認1):") or 1)
digits = int(input("位數(shù) (默認3):") or 3)
sep = input("分隔符 (默認_):") or "_"
return start, digits, sep
except ValueError:
print("! 輸入無效,使用默認設(shè)置:起始=1,位數(shù)=3,分隔符=_")
return 1, 3, "_"
完整代碼實現(xiàn)
下面是整合了所有模塊的完整代碼實現(xiàn):
import os
def get_directory():
"""獲取用戶輸入的有效目錄路徑"""
while True:
dir_path = input("請輸入要處理的目錄路徑:").strip()
if os.path.isdir(dir_path):
return os.path.normpath(dir_path)
print("× 目錄不存在,請重新輸入")
def list_files(dir_path):
"""列出目錄中的所有文件并返回列表"""
files = [f for f in sorted(os.listdir(dir_path))
if os.path.isfile(os.path.join(dir_path, f))]
print("\n目錄文件列表:")
for idx, f in enumerate(files, 1):
print(f"{idx:02d}. {f}")
return files
def get_rename_mode():
"""獲取用戶選擇的命名模式"""
print("\n請選擇重命名模式:")
print("1. 添加前綴\t2. 添加后綴")
print("3. 替換字符串\t4. 序列號")
while True:
mode = input("請輸入選項 (1-4):").strip()
if mode in {'1', '2', '3', '4'}:
return mode
print("× 無效輸入,請重新選擇")
def get_sequence_params():
"""獲取序列號模式參數(shù)"""
print("\n序列號模式參數(shù)設(shè)置:")
try:
start = int(input("起始數(shù)字 (默認1):") or 1)
digits = int(input("位數(shù) (默認3):") or 3)
sep = input("分隔符 (默認_):") or "_"
return start, digits, sep
except ValueError:
print("! 輸入無效,使用默認設(shè)置:起始=1,位數(shù)=3,分隔符=_")
return 1, 3, "_"
def main():
# 獲取目錄路徑
dir_path = get_directory()
# 獲取文件列表
files = list_files(dir_path)
if not files:
print("! 該目錄沒有可操作文件")
return
# 確認操作
if input("\n是否繼續(xù)操作?(y/n) ").lower() != 'y':
print("操作已取消")
return
# 獲取重命名模式
mode = get_rename_mode()
# 獲取模式參數(shù)
params = {}
if mode == '1':
params['prefix'] = input("\n請輸入要添加的前綴:")
elif mode == '2':
params['suffix'] = input("\n請輸入要添加的后綴:")
elif mode == '3':
params['old'] = input("\n請輸入要替換的字符串:")
params['new'] = input("請輸入替換后的新字符串:")
elif mode == '4':
params['start'], params['digits'], params['sep'] = get_sequence_params()
# 二次確認
if input("\n!! 確認執(zhí)行重命名操作?(y/n) ").lower() != 'y':
print("操作已取消")
return
# 執(zhí)行重命名
counter = 0
current_num = params.get('start', 0)
for filename in files:
# 跳過隱藏文件(可選)
if filename.startswith('.'):
continue
# 分割文件名和擴展名
file_path = os.path.join(dir_path, filename)
base, ext = os.path.splitext(filename)
new_base = base
# 根據(jù)模式生成新文件名
if mode == '1':
new_base = f"{params['prefix']}{base}"
elif mode == '2':
new_base = f"{base}{params['suffix']}"
elif mode == '3':
new_base = base.replace(params['old'], params['new'])
elif mode == '4':
num_format = f"{current_num:0{params['digits']}}d"
new_base = f"{num_format}{params['sep']}{base}"
current_num += 1
new_name = f"{new_base}{ext}"
new_path = os.path.join(dir_path, new_name)
# 跳過未修改的情況
if new_name == filename:
continue
# 執(zhí)行重命名
try:
if not os.path.exists(new_path):
os.rename(file_path, new_path)
print(f"√ {filename} → {new_name}")
counter += 1
else:
print(f"! 沖突:{new_name} 已存在")
except Exception as e:
print(f"× 錯誤:重命名 {filename} 失敗 - {str(e)}")
print(f"\n操作完成,成功重命名 {counter}/{len(files)} 個文件")
if __name__ == "__main__":
print("=== 文件批量重命名工具 ===")
main()
代碼解析
核心設(shè)計思路
用戶體驗優(yōu)先:
- 清晰的提示信息和錯誤反饋
- 操作前確認機制,防止誤操作
- 列表顯示處理文件,讓用戶了解操作對象
安全性考慮:
- 檢測目標文件是否存在,避免覆蓋
- 異常捕獲處理,確保程序穩(wěn)定運行
- 操作結(jié)果明確展示,方便用戶核對
功能模塊化:
- 每個功能獨立封裝為函數(shù)
- 清晰的函數(shù)命名和注釋
- 參數(shù)傳遞而非全局變量
技術(shù)要點
1.路徑處理:
- 使用os.path.isdir()驗證目錄有效性
- 使用os.path.normpath()標準化路徑格式
- 使用os.path.join()構(gòu)建完整文件路徑
- 使用os.path.splitext()分離文件名和擴展名
2.列表推導式:
- [f for f in sorted(os.listdir(dir_path)) if os.path.isfile(os.path.join(dir_path, f))]
- 一行代碼實現(xiàn)文件過濾和排序
3.字符串格式化:
- f-string實現(xiàn)動態(tài)字符串拼接
- 使用{current_num:0{params['digits']}}d實現(xiàn)動態(tài)寬度的數(shù)字格式化
4.輸入驗證與默認值:
- 使用input(...) or default_value提供默認值
- 使用集合{'1', '2', '3', '4'}高效驗證輸入選項
進階改進方向
圖形界面:添加GUI界面,提升用戶體驗
正則表達式支持:增加正則表達式匹配和替換功能
預覽功能:在執(zhí)行前預覽重命名結(jié)果
撤銷功能:添加操作日志和撤銷功能
批處理模式:支持從配置文件讀取參數(shù),實現(xiàn)無人工干預的批處理
遞歸處理:支持遞歸處理子目錄中的文件
到此這篇關(guān)于Python實現(xiàn)文件批量重命名器的文章就介紹到這了,更多相關(guān)Python重命名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
django和vue實現(xiàn)數(shù)據(jù)交互的方法
今天小編就為大家分享一篇django和vue實現(xiàn)數(shù)據(jù)交互的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Python優(yōu)秀開源項目Rich源碼解析的流程分析
這篇文章主要介紹了Python優(yōu)秀開源項目Rich源碼解析,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
python讀取word文檔,插入mysql數(shù)據(jù)庫的示例代碼
今天小編就為大家分享一篇python讀取word文檔,插入mysql數(shù)據(jù)庫的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
舉例講解Python中metaclass元類的創(chuàng)建與使用
在Python中我們用type函數(shù)可以動態(tài)地創(chuàng)建一個元類,同樣也可以用__metaclass__屬性來指定一個元類,接下來我們就來具體舉例講解Python中metaclass元類的創(chuàng)建與使用2016-06-06

