【Python】批量修改照片日期和文件名

更新2022.09.09

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

需求

  1. 一些照片没有拍摄日期,传到手机就会显示在上传的这一天,导致时间线错乱。根据文件名中包含的日期,在Exif中插入拍摄日期,这样在手机里就可以按照时间线排列了。
  2. 反之,也可以根据拍摄日期,重置照片文件名。如果两张照片的拍摄时间完全一样,就在文件名后累加数字 123… 区分:
    IMG_20210722_070707_1.jpg
    IMG_20210722_070707_2.jpg

运行结果展示

运行结果展示

代码

代码已经大幅更新,需要的同学可以去文章开头自取。

# Change photo name by photo date/time and vice versa.
# 功能:
# 1. 根据照片名称修改照片日期:根据照片名中包含的日期信息,修改照片Exif中的日期信息
# 2. 根据照片日期修改照片名称:根据照片Exif中的日期信息,按照统一格式重命名照片

import os, time, piexif, re
import re
from PIL import Image

# ------------------------------------------------------------------
## general functions
# ------------------------------------------------------------------
def check_format(photo_path):
    '''
    检查文件类型是否为图片格式,返回文件后缀类型,大写字母
    '''

def check_exif(photo_path):
    '''
    检查文件是否有Exif,Exif中是否有拍摄时间
    '''

def png2jpg(photo_path):
    '''
    png2jpg
    ps. 直接改文件后缀名,后续跑不通,piexif不认这个JPG,原因不详
    '''

# ------------------------------------------------------------------
## change photo name based on photo time
# ------------------------------------------------------------------
def change_photo_name(folder):
    '''
    修改JPG照片的文件名为拍摄日期,如果Exif中不包含拍摄日期,修改文件名为照片修改日期
    e.g., IMG_20210424_071829.jpg
    ''' 

def get_time_from_exif(photo_path):
    '''
    从Exif中提取照片时间,返回格式为2021:04:22 07:07:07
    '''  

def get_time_from_create_date(photo_path):
    '''
    从照片修改日期提取时间,返回格式为2021:04:22 07:07:07
    '''  

def get_new_name(photo_path, photo_time):
    '''
    获取照片新文件名,如果两张照片时分秒也相同,在文件名后累加数字1 2 3...区分
    e.g., IMG_20210422_070707_X.jpg
    '''

# ------------------------------------------------------------------
## change photo time based on photo name
# ------------------------------------------------------------------
def change_photo_time(folder):
    '''
    修改该路径下的所有JPG照片的时间
    '''   

def get_time_from_name(photo_name):
    '''
    利用正则表达式从文件名中提取时间,再转换为Exif时间格式
    from 'IMG_20220102_030405.jpg' to '2022:01:01 03:04:05'
    '''  


def set_photo_time(photo_name, photo_path):
    '''
    给照片设置拍摄时间,导入exif信息
    '''   

# ------------------------------------------------------------------
## main
# ------------------------------------------------------------------
if __name__ == '__main__':
    '''
    folder: 需要修改的照片文件夹路径
    '''
    folder = r'D:\4 照片\新建文件夹\新建文件夹'  # 此处改为需要修改的照片文件夹路径
    no_exif, exif_load_error, no_time_in_name = [[] for i in range(3)]

    motion = input('Change name or time: ') # 输入需要修改照片name还是time
    while motion not in ['name', 'time']:
        motion = input('Please just input name or time: ')
    if motion == 'name':
        change_photo_name(folder)
    else:  # motion == 'time'
        change_photo_time(folder)
    
    # 统计不能执行的照片文件
    if no_exif: 
        print('Photos_no_exif:\n', no_exif)
    if exif_load_error: 
        print('Photos_exif_load_error:\n', exif_load_error)
    if no_time_in_name: 
        print('Photos_no_time_in_name:\n', no_time_in_name)
  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王大可-W

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值