当前位置:首页>python>自学编程第59课:Python批量重命名照片——让杂乱的照片变得整整齐齐

自学编程第59课:Python批量重命名照片——让杂乱的照片变得整整齐齐

  • 2026-09-04 08:55:00
自学编程第59课:Python批量重命名照片——让杂乱的照片变得整整齐齐

点击蓝字 关注我们

上一课整理完下载文件夹后,Tyree的桌面干净了不少。但他很快发现了另一个问题:手机拍的照片导到电脑后,名字全是一串数字和字母,根本不知道哪张是哪天拍的。

他说:“能不能把照片按拍摄日期和序号统一命名?”

“能。这节课就做这个。”

今天我们就用Python批量重命名照片——把杂乱的文件名改成“日期_序号”的格式。

1

获取照片的拍摄日期

先想一个问题:照片的拍摄日期藏在哪里?

你在电脑上右键一张照片,点“属性”,能看到“拍摄日期”这一栏。这个日期不是文件创建时间,而是照片真正被拍下的时间,它藏在照片文件内部的元数据里,专业的叫法是“EXIF信息”。

但是Python不会自动帮你读这个信息,它需要你告诉它去“问”照片文件。怎么问?用PIL这个库。我们这节课就先解决一个最基础的问题:如何从照片文件里把拍摄日期读出来。

先安装PIL:

pip install pillow

然后读取照片的拍摄日期,下面来看代码

代码解释:

`Image.open()`:打开图片文件。

`_getexif()`:提取EXIF数据(包含了拍摄时间、设备型号等信息)。

`exif` 是一个字典,`tag_id` 是数字编号,`value` 是对应的值。`TAGS` 把`DateTimeOriginal` 就是拍摄时间,格式是 `"年:月:日 时:分:秒"`。

注意:有些图片(如手机截图)没有EXIF信息,`get_taken_date` 会返回 `None`。

2

如果没有拍摄日期怎么办?

有些图片没有EXIF,那用什么?

你可能会遇到这种情况:手机截图、网页另存的图片、别人发给你的照片,它们往往没有EXIF信息。如果读取不到,程序就不知道该用什么日期来命名。

这时候需要有一个备用方案。每张图片在电脑里至少有一个属性是肯定有的:文件修改时间。它虽然不是拍摄时间,但至少能用来排序,也比你手动去翻文件属性要快得多。

所以这一节我们要做的逻辑是:优先读EXIF拍摄时间,如果没有,就用文件的修改时间来代替。。

代码解释:

`os.path.getmtime()` 获取文件的最后修改时间(时间戳格式),

`datetime.fromtimestamp()` 把它转成日期对象。

这样我们就有两层保障:能读到EXIF就用拍摄时间,读不到就用文件修改时间。基本上所有图片都能处理。

3

批量重命名——把东西“从哪来”变成“去哪”

现在有了每张照片的日期,下一步就是批量改名。

Tyree第一次听到“批量重命名”时,以为是一张一张改。我告诉他:不用那么麻烦。你把所有照片放一个文件夹里,让程序一口气全部处理完。

重命名的逻辑其实可以拆解成几个步骤:

1. 遍历文件夹,找出所有图片文件

2. 读取出每张照片的日期

3. 按日期排序(这样改名后顺序是对的)

4. 生成新文件名:日期 + 序号 + 扩展名

5. 执行改名

简单说:先找出所有照片,排好顺序,再一个一个改名。 跟老师点名一样,先数数班级里有几个人,排好座位,再依次叫名字。

代码解释:

`image_extensions`:支持常见的图片格式。

`os.listdir(folder_path)`:获取文件夹下所有内容。

 `os.path.splitext(filename)[1].lower()`:获取扩展名并转小写。

`files.append((date, file_path, ext))`:把日期、完整路径、扩展名打包成元组存到列表。

`files.sort(key=lambda x: x[0])`:按日期排序,`lambda` 指定按元组的第一个元素(日期)排序。

`date.strftime("%Y-%m-%d")`:把日期转成 `2024-07-03` 这样的格式。

`{i:03d}`:序号用三位数字显示(001、002、003)。

 `os.path.exists(new_path)`:检查新文件名是否已存在,避免覆盖。

 `os.rename(file_path, new_path)`:执行重命名。

最终效果:

IMG_20240703_145632.jpg -> 旅行_2024-07-03_001.jpg

IMG_20240702_091234.jpg -> 旅行_2024-07-02_002.jpg

4

课后小挑战

挑战1:挑战1:在重命名时保留原文件名的一部分,比如 `IMG_20240703_145632.jpg` 变成 `2024-07-03_旅行_001.jpg`。

挑战2:增加一个“预览模式”,只打印新文件名但不执行重命名,确认无误后再执行。

5

今天学到了什么

- `PIL.Image`:读取图片并提取EXIF信息

- `os.path.getmtime()`:获取文件修改时间

- `os.rename()`:重命名文件

- `datetime.strftime()`:格式化日期

- 用 `while` 循环检测文件名冲突,避免覆盖已有文件

好了,今天课程就到这,明天我们学习:定时备份文件夹——让电脑自动备份重要文件,再也不怕误删。

————热门推荐————

自学编程第40课:打包游戏成exe文件——发给朋友

自学编程第46课:Python写段代码让麦克风实时语音识别

少儿自学编程第45课:——从音频文件识别语音

自学编程第36课:太空避障——完整游戏设计与难度平衡

自学编程第7课:turtle画图入门画正方形五角形三角形

自学编程第6课:列表+循环+判断做一个学生成绩分析器

自学编程第51课:爬虫入门让Python帮你从网页“拿”数据

自学编程第一步:安装Python和Thonny 零基础图文教程

本系列教程持续更新,欢迎关注收藏

图‖文 宝月小鹿 转载须标明出处

点赞

收藏

分享

最新文章

随机文章