前言
工作中经常遇到需要批量处理文件的场景:下载的图片需要统一命名、报告需要按日期排序、项目文件需要规范化......手动一个个改?太浪费时间了!
今天教你用 Python 几行代码搞定批量重命名,从此告别重复劳动。
场景描述
假设你有一个文件夹,里面有一堆下载的图片:
erlang
下载文件夹/
├── IMG_20240227_001.jpg
├── IMG_20240227_002.jpg
├── IMG_20240227_003.jpg
└── ...
你想把它们改成更有意义的名称,比如 项目截图_001.jpg、项目截图_002.jpg 这样。
代码实现
python
import os
def batch_rename(folder_path, prefix):
"""
批量重命名文件
folder_path: 文件夹路径
prefix: 新文件名前缀
"""
# 获取文件夹内所有文件
files = os.listdir(folder_path)
# 过滤出图片文件
image_files = [f for f in files if f.endswith(('.jpg', '.png', '.jpeg'))]
# 排序,确保顺序一致
image_files.sort()
# 批量重命名
for index, old_name in enumerate(image_files, start=1):
# 获取文件扩展名
ext = os.path.splitext(old_name)[1]
# 生成新文件名
new_name = f"{prefix}_{index:03d}{ext}"
# 构建完整路径
old_path = os.path.join(folder_path, old_name)
new_path = os.path.join(folder_path, new_name)
# 重命名
os.rename(old_path, new_path)
print(f"{old_name} -> {new_name}")
# 使用示例
folder = "/Users/你的用户名/Downloads/下载文件夹"
batch_rename(folder, "项目截图")
代码解析
os.listdir()- 列出文件夹内所有文件os.path.splitext()- 分离文件名和扩展名os.path.join()- 安全地拼接路径(兼容 Windows 和 Mac)os.rename()- 执行重命名操作f"{prefix}_{index:03d}"- 格式化字符串,03d表示 3 位数字,不足补零
进阶用法
添加时间戳
python
from datetime import datetime
def rename_with_timestamp(folder_path):
files = os.listdir(folder_path)
today = datetime.now().strftime("%Y%m%d")
for index, old_name in enumerate(files, start=1):
ext = os.path.splitext(old_name)[1]
new_name = f"{today}_{index:03d}{ext}"
# ... 重命名代码
正则表达式替换
python
import re
def rename_with_regex(folder_path, pattern, replacement):
"""使用正则替换文件名中的特定内容"""
files = os.listdir(folder_path)
for old_name in files:
new_name = re.sub(pattern, replacement, old_name)
if new_name != old_name:
# ... 重命名代码
注意事项
- 备份重要文件 - 重命名前最好备份,避免误操作
- 测试小批量 - 先用几个文件测试,确认无误再批量处理
- 处理冲突 - 如果新文件名已存在,会报错,需要额外处理
完整安全版本
python
import os
import shutil
def safe_batch_rename(folder_path, prefix):
files = [f for f in os.listdir(folder_path)
if os.path.isfile(os.path.join(folder_path, f))]
files.sort()
renamed = []
for index, old_name in enumerate(files, start=1):
ext = os.path.splitext(old_name)[1]
new_name = f"{prefix}_{index:03d}{ext}"
old_path = os.path.join(folder_path, old_name)
new_path = os.path.join(folder_path, new_name)
# 避免覆盖已有文件
if os.path.exists(new_path):
print(f"跳过:{new_name} 已存在")
continue
try:
os.rename(old_path, new_path)
renamed.append((old_name, new_name))
print(f"✓ {old_name} -> {new_name}")
except Exception as e:
print(f"✗ {old_name} 失败: {e}")
print(f"\n完成!共处理 {len(renamed)} 个文件")
return renamed
总结
批量重命名只是 Python 自动化办公的入门,掌握了 os 模块的基础操作,你就可以:
- 批量移动/复制文件
- 自动整理文件夹
- 生成报告文档
下一篇我们将学习 Excel 报表自动化,用 Python 处理表格数据,敬请期待!
如果这篇文章对你有帮助,欢迎点赞收藏!有任何问题可以在评论区留言。