无论用手机还是相机,照片名称格式基本都是 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

参考资料