Python 照片批量重命名
无论用手机还是相机,照片名称格式基本都是 `IMG-1234.JPG`,随着照片数量的增多,我想把照片都重命名为 `2017-11-11_142109.jpg` 的格式。Python 再次向我证明了它的便捷易用。这里我将详细记录批处理程序实现的所有步骤。
无论用手机还是相机,照片名称格式基本都是 IMG-1234.JPG
,随着照片数量的增多,我想把照片都重命名为 2017-11-11_142109.jpg
的格式。Python 再次向我证明了它的便捷易用。
第一步 创建虚拟环境
使用虚拟环境可以避免 python 程序的主目录中存在太多平时不需要的库。
$ mkdir exif && cd exif
$ python3 -m venv .
$ . bin/activate
第二步 安装 exifread 库
读取照片 EXIF
信息要借助 exifread
库。
(exif) $ pip install exifread
第三步 创建 exif.py 程序文件
因为程序非常简单,所以只要这一个文件即可,将所有照片批处理逻辑都写到这个文件中。
# 本程序用于将指定目录中的照片按照实际拍摄的时间批量重命名
# 命名格式为:2017-11-11_142310.jpg
import exifread, os
# 指定图片目录
# 相对路径:即以本程序所在目录作为查找的起点
# 绝对路径:文件系统实际路径
target_dir = '/Volumes/文件同步/101APPLE'
# 检查图片路径
def check_dir(image_dir):
if image_dir[-1] == '/':
return image_dir
else:
return image_dir + '/'
image_dir = check_dir(target_dir)
total = len(os.listdir(image_dir))
count = 0
for p in os.listdir(image_dir):
print('正在处理:' + p)
if(os.path.isfile(image_dir + str(p))):
pic = open(image_dir + str(p), 'rb')
exif = exifread.process_file(pic, details=False)
if('EXIF DateTimeOriginal' in exif.keys()):
take_time = str(exif['EXIF DateTimeOriginal'])
pic_date = take_time[0:10].replace(':', '-', 2)
pic_time = take_time[11:].replace(':', '')
new_name = pic_date + '_' + pic_time + os.path.splitext(p)[1]
os.rename(image_dir + p, image_dir + new_name)
print('新文件名:' + new_name)
count += 1
print("""
批处理完毕!
文件总数:%d
已处理:%d
""" % (total, count))
使用方法
在程序文件中指定需要批处理的图片路径,可以使用绝对路径,也可以使用相对路径,然后执行程序即可。
(exif) $ python exif.py
参考资料
- ExifRead https://pypi.python.org/pypi/ExifRead
- py3exiv2 http://www.py3exiv2.tuxfamily.org/