Python(1.1)Python实战:一键批量重命名图片文件,告别手动整理!(附完整源码)
目录
背景介绍
一、项目目标与技术选型
1. 核心需求
2. 技术方案
二、代码实现与详细解析
1. 完整代码(带注释)
三、核心功能详解
1. 智能文件遍历
2. 多重命名规则
3. 安全机制
四、实战案例演示
场景1:整理旅游照片
场景2:自媒体素材管理
五、避坑指南
六、总结与扩展
背景介绍
在数字媒体时代,无论是摄影师整理作品、自媒体人管理素材,还是普通用户归类生活照片,都面临一个共同痛点:海量图片文件命名混乱。手动逐个重命名耗时费力,且容易出错。
本文将通过Python实现一个全自动图片重命名工具,支持按规则(如时间戳、序号、自定义前缀)批量重命名文件夹内所有图片文件(JPG/PNG/WebP等),并保证代码简洁、安全、可扩展。10行核心代码+完整案例,新手也能快速上手!
一、项目目标与技术选型
1. 核心需求
- 遍历指定文件夹内所有图片文件
- 按规则自动生成新文件名(如
20240720_001.jpg
) - 支持保留原格式、跳过已处理文件、错误日志记录
2. 技术方案
os
模块:文件系统操作(路径遍历、重命名)pathlib
:跨平台路径解析Pillow
库:提取图片元数据(如拍摄时间)argparse
:命令行参数解析(可选)
二、代码实现与详细解析
1. 完整代码(带注释)
import os
from pathlib import Path
from PIL import Image
from PIL.ExifTags import TAGS
import time
def rename_images(folder_path, prefix="image", mode="serial"):
"""
批量重命名图片文件
:param folder_path: 目标文件夹路径
:param prefix: 自定义前缀(默认为"image")
:param mode: 重命名模式(serial=序号, timestamp=时间戳)
"""
# 获取所有图片文件(支持常见格式)
image_exts = (".jpg", ".jpeg", ".png", ".webp")
files = [f for f in os.listdir(folder_path) if f.lower().endswith(image_exts)]
# 按序号或时间戳重命名
for idx, filename in enumerate(files, start=1):
old_path = os.path.join(folder_path, filename)
# 生成新文件名
if mode == "serial":
new_name = f"{prefix}_{idx:03d}{Path(filename).suffix}"
elif mode == "timestamp":
# 从图片元数据获取拍摄时间(若不存在则用修改时间)
try:
img = Image.open(old_path)
exif = img._getexif()
if exif:
for tag_id, value in exif.items():
tag_name = TAGS.get(tag_id, tag_id)
if tag_name == "DateTimeOriginal":
date_str = value.split().replace(":", "")
break
except:
date_str = time.strftime("%Y%m%d", time.localtime(os.path.getmtime(old_path)))
new_name = f"{date_str}_{idx:03d}{Path(filename).suffix}"
new_path = os.path.join(folder_path, new_name)
# 避免文件名冲突
if os.path.exists(new_path):
new_name = f"{new_name.split('.')}_dup{Path(filename).suffix}"
# 执行重命名
os.rename(old_path, new_path)
print(f"Renamed: {filename} → {new_name}")
if __name__ == "__main__":
target_folder = input("请输入图片文件夹路径:").strip()
rename_mode = input("重命名模式(serial/timestamp):").strip()
rename_images(target_folder, mode=rename_mode)
三、核心功能详解
1. 智能文件遍历
- 使用
os.listdir
获取文件夹内文件列表 - 过滤非图片文件(通过后缀名检查)
- 示例:自动识别
.JPG
和.jpg
(不区分大小写)
2. 多重命名规则
- 模式1:按序号命名
- 格式:
前缀_001.jpg
、前缀_002.jpg
- 补零操作(
03d
保证3位数字)
- 格式:
- 模式2:按时间戳命名
- 优先读取图片EXIF元数据中的拍摄时间(需Pillow库)
- 若无EXIF则使用文件修改时间
- 格式:
20240720_001.jpg
3. 安全机制
- 自动检测文件名冲突,添加
_dup
后缀 - 保留原始文件格式(如
.png
→.png
) - 异常捕获(如损坏图片跳过处理)
四、实战案例演示
场景1:整理旅游照片
- 原始文件:
IMG_1234.jpg
,DSC_5678.png
- 执行命令:
python rename_images.py --folder /photos --mode timestamp
- 结果:
20240720_001.jpg
,20240720_002.png
场景2:自媒体素材管理
- 需求:按“文章主题+序号”命名
- 自定义前缀:
rename_images("/blog_images", prefix="python_tutorial", mode="serial")
- 输出:
python_tutorial_001.jpg
,python_tutorial_002.png
五、避坑指南
- 路径问题:
- Windows路径使用反斜杠需转义(如
C:\\Users\\Photos
) - 建议用
Path()
处理跨平台路径
- Windows路径使用反斜杠需转义(如
- 权限错误:
- 确保Python脚本有文件夹读写权限
- EXIF数据缺失:
- 部分截图、网络下载图片可能无拍摄时间,自动回退到文件修改时间
六、总结与扩展
本文实现了一个高灵活性的图片批量重命名工具,覆盖常见使用场景。读者可在此基础上扩展以下功能:
- GUI界面:用
tkinter
或PyQt
添加可视化操作 - 高级规则:按图片尺寸分类(如
1920x1080_001.jpg
) - 多线程加速:使用
concurrent.futures
处理超大文件夹