用 Python 批量重命名照片:按拍摄时间归档

举报
yd_224001237 发表于 2026/11/03 06:02:29 2026/11/03
【摘要】 用 Python 读取照片 EXIF 里的拍摄时间,批量重命名为「日期_时分秒」并按年月归档,附无 EXIF 时的兜底方案与实战代码。

为什么按拍摄时间而不是文件名

手机和相机导出的照片,文件名通常是 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,前者跨磁盘也能用;并在开始前把原始目录整体备份一份,出问题能立刻回退。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。