以下是使用Python实现文件批量重命名的示例代码,包含多种常见场景的解决方案:
import os
import re
from datetime import datetime
def batch_rename(path, mode=1, **kwargs):
"""
文件批量重命名工具
参数:
path: 目标文件夹路径
mode: 重命名模式
1 - 顺序编号
2 - 添加前缀/后缀
3 - 正则替换
4 - 时间戳命名
5 - 自定义函数处理
kwargs: 根据模式传递不同参数
"""
files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]
for index, filename in enumerate(files, start=1):
old_path = os.path.join(path, filename)
name, ext = os.path.splitext(filename)
# 模式1:顺序编号
if mode == 1:
new_name = f"{kwargs.get('prefix', '')}{index:03d}{ext}"
# 模式2:添加前后缀
elif mode == 2:
new_name = f"{kwargs.get('prefix', '')}{name}{kwargs.get('suffix', '')}{ext}"
# 模式3:正则替换
elif mode == 3:
pattern = re.compile(kwargs['pattern'])
new_name = pattern.sub(kwargs['repl'], name) + ext
# 模式4:时间戳命名
elif mode == 4:
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
new_name = f"{timestamp}_{index}{ext}"
# 模式5:自定义处理函数
elif mode == 5:
new_name = kwargs['custom_func'](filename)
else:
raise ValueError("Invalid mode selected")
new_path = os.path.join(path, new_name)
os.rename(old_path, new_path)
print(f"Renamed: {filename} -> {new_name}")
# 使用示例
if __name__ == "__main__":
target_dir = "./test_files" # 修改为你的目标目录
# 示例1:顺序编号(添加前缀)
batch_rename(target_dir, mode=1, prefix="doc_")
# 示例2:添加日期后缀
today = datetime.now().strftime("%Y%m%d")
batch_rename(target_dir, mode=2, suffix=f"_{today}")
# 示例3:正则替换(删除所有数字)
batch_rename(target_dir, mode=3, pattern=r'\d+', repl='')
# 示例4:自定义处理函数(首字母大写)
def custom_rename(filename):
name, ext = os.path.splitext(filename)
return f"{name.capitalize()}{ext}"
batch_rename(target_dir, mode=5, custom_func=custom_rename)
功能说明:
-
顺序编号模式:为文件添加连续数字编号
prefix
参数可设置编号前缀- 格式示例:doc_001.txt, doc_002.txt
-
前后缀模式:
- 可同时添加前缀和后缀
- 示例:file_20230801_backup.txt
-
正则替换模式:
- 使用正则表达式匹配文件名中的特定模式进行替换
- 示例:将文件名中的日期格式从YYYYMMDD改为YYYY-MM-DD
-
时间戳模式:
- 自动生成时间戳+序号组合的文件名
- 格式示例:20230801_143022_001.txt
-
自定义函数模式:
- 支持通过自定义函数实现复杂重命名逻辑
- 示例:文件名首字母大写、根据文件内容生成名称等
使用建议:
- 先在小范围文件测试后再正式使用
- 重要文件操作前建议备份
- 可通过修改
files
列表的生成逻辑实现:- 仅处理特定扩展名文件:
[f for f in files if f.endswith('.txt')]
- 排除特定文件:
[f for f in files if not f.startswith('.')]
- 按文件时间排序:
sorted(files, key=lambda x: os.path.getmtime(x))
- 仅处理特定扩展名文件:
扩展功能建议:
- 添加文件过滤功能(按扩展名、大小、修改时间等)
- 支持递归处理子目录
- 添加撤销功能(记录重命名历史)
- 创建图形界面(可结合tkinter实现)
根据具体需求选择适合的模式并调整参数即可实现灵活的文件批量重命名操作。