【Python】批量修改照片文件名为拍摄日期

此篇博客介绍如何使用Python和Piexif库,根据照片的Exif信息自动为无意义文件名的老照片重命名,格式为拍摄日期时间(如IMG_20210422_070707.jpg),如遇相同时间则通过数字区分(IMG_20210422_070707_1.jpg)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更新2022.09.09

代码已经大幅更新,需要的同学可以去这篇博客自取。

更新 2021.05.07

合并了修改照片的拍摄日期和文件名功能,请看:批量修改照片的拍摄日期和文件名

需求

最近整理老照片,有一些照片的文件名没有含义和规律。为了方便查看,可以根据拍摄日期,修改文件名为拍摄日期时间(比如IMG_20210422_070707.jpg)。主要是利用piexif库提取JPG照片的Exif,获取拍摄时间,然后修改文件名。

如果两张照片的拍摄时间完全一样,时分秒都相同,就在文件名后累加数字123…区分:
IMG_20210422_070707_1.jpg
IMG_20210422_070707_2.jpg

Python代码

# photo name correction 
# 2021.04 @Wyatt
# 需求:修改文件名为拍摄日期,比如:IMG_20210422_070707.jpg

推荐

如果需要反过来,根据文件名中的日期修改照片的拍摄日期,可以参考我上一篇文章:批量修改照片日期

### 使用Python批量重命名文件 为了实现批量重命名文件的功能,可以利用Python中的`os`模块以及可能的`re`(正则表达式)模块来处理更复杂的情况。下面提供了一个具体的例子,该示例展示了如何遍历指定目录下的所有JPEG图像文件,并按照一定的规则对其进行重新命名。 #### 示例代码:基于日期和事件名称重命名照片 当涉及到特定场景如摄影活动时,可以根据拍摄日期和事件描述来自定义新的文件名: ```python import os def rename_photos(directory, date, event): """根据给定的日期和事件参数批量重命名指定目录内的JPG图片.""" for filename in os.listdir(directory): if filename.lower().endswith('.jpg'): new_name = f"{date}_{event}_{filename}" old_file_path = os.path.join(directory, filename) new_file_path = os.path.join(directory, new_name) os.rename(old_file_path, new_file_path) print(f"Renamed {old_file_path} to {new_file_path}") ``` 此函数接受三个参数:目标文件夹路径、表示拍照日期的字符串以及描述性的事件标签[^4]。 #### 更通用的批处理方式 如果希望创建更加灵活的方案,则可以通过引入计数器变量来进行编号操作,适用于任何类型的文件而不仅仅是图片: ```python import os folder_path = "/path/to/your/images" files = sorted([f for f in os.listdir(folder_path) if not f.startswith('.')]) # 排除隐藏文件 for index, file_name in enumerate(files, start=1): ext = os.path.splitext(file_name)[1].lower() # 获取并转换扩展名为小写形式 source = os.path.join(folder_path, file_name) destination = os.path.join(folder_path, str(index).zfill(3) + ext) # zfill用于填充前导零 try: os.rename(source, destination) print(f'Successfully renamed "{source}" as "{destination}".') except Exception as e: print(f'Failed to rename "{source}", error: {e}') ``` 上述脚本会读取指定文件夹内所有的非隐藏文件,并按字母顺序排列后逐一进行重命名,新名字由三位数字加上原始文件扩展名组成[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值