用 Python 批量重命名照片:按拍摄时间归档
为什么按拍摄时间而不是文件名
手机和相机导出的照片,文件名通常是 IMG_0001、DSC_2847 这类编号,换个设备就从头重来,同一天拍的东西散落各处。真正稳定的排序依据是照片里的拍摄时间——它写在 EXIF 里,跟文件名无关。按拍摄时间重命名并归档,好处很直接:文件夹按年月自动分层,文件按时间自然排序,多年积累的照片也能一眼找到某年某月。
第一步:找到照片里的拍摄时间
用 Pillow 就够了,不需要额外的 EXIF 库。打开图片后取 getexif(),在标签 36867(DateTimeOriginal,原始拍摄时间)、36868(DateTimeDigitized)、306(DateTime)里按顺序找第一个存在的。格式是「YYYY:MM:DD HH:MM:SS」,注意它是冒号分隔的日期,不是短横线,解析时要用对应格式。这一步最关键:拿不到时间,后面的重命名就没有依据。
第二步:处理没有 EXIF 的照片
经过微信、社交软件转发的图片经常被抹掉 EXIF。兜底方案是按文件修改时间(os.path.getmtime)排,虽然不如拍摄时间准,但至少能把「某段时间的照片」归到一起。判断逻辑是:EXIF 有就用 EXIF,没有就用修改时间,并把这个来源记录下来,方便事后人工抽查有疑问的部分。
第三步:重命名与归档的命名约定
推荐「YYYYMMDD_HHMMSS」这种无分隔符格式:排序稳定、兼容所有系统、不含空格。同一秒拍多张(连拍)容易撞名,做法是检测到重名时追加 _1、_2 后缀。归档目录用「YYYY/YYYY-MM」两层,一年一个文件夹、一月一个子目录,既不会单目录文件过多,也便于整年打包备份。
第四步:先演练再执行
批量移动文件是不可逆操作,务必先做 dry-run:只打印「原路径 → 新路径」不实际移动,人工扫一遍有没有异常(比如大量文件回退到修改时间、或全归到同一天)。确认无误后再加 --apply 真正执行。另外建议全程用 shutil.move 而不是 os.rename,前者跨磁盘也能用;并在开始前把原始目录整体备份一份,出问题能立刻回退。
- 点赞
- 收藏
- 关注作者
评论(0)