需求
最近整理老照片,有一些照片的文件名没有含义和规律。为了方便查看,可以根据拍摄日期,修改文件名为拍摄日期时间(比如IMG_20210422_070707.jpg)。主要是利用piexif库提取JPG照片的Exif,获取拍摄时间,然后修改文件名。
如果两张照片的拍摄时间完全一样,时分秒都相同,就在文件名后累加数字123…区分:
IMG_20210422_070707_1.jpg
IMG_20210422_070707_2.jpg
Python代码
# photo name correction
# 2021.04 @Wendell
# 需求:修改文件名为拍摄日期,比如:IMG_20210422_070707.jpg
import os
import piexif
def checkFormat(photoPwd):
'''
检查文件类型是否为图片格式
'''
(root, ext) = os.path.splitext(photoPwd)
return str.upper(ext[1:]) # 返回文件后缀类型
def checkExif(photoPwd):
'''
检查Exif是否包含拍摄日期
'''
exif_dict = piexif.load(photoPwd) # 照片的Exif
exif_time = piexif.ExifIFD.DateTimeOriginal # 时间在exif_dict里面的key
return exif_time in exif_dict["Exif"]
def getTime(photoPwd):
'''
提取照片拍摄时间
from '2021:04:22 07:07:07' to '20210422_070707'
'''
exif_dict = piexif.load(photoPwd) # 照片的Exif
exif_time = piexif.ExifIFD.DateTimeOriginal # 时间在exif_dict里面的key
photoTime = exif_dict["Exif"][exif_time] # byte形式:b'2021:04:22 07:07:07'
pT = bytes.decode(photoTime) # 转换为str
photoTime = f'{pT[0:4]}{pT[5:7]}{pT[8:10]}_{pT[11:13]}{pT[14:16]}{pT[17:19]}' # 格式为20210422_070707
return photoTime
def getNewName(photoTime):
'''
获取照片新文件名,另外,如果两张照片时分秒也相同,在文件名后累加数字123...区分
'''
count = 1
new_photoName = f'IMG_{photoTime}.jpg' # e.g., IMG_20210422_070707.jpg
while new_photoName in os.listdir(folder):
new_photoName = f'IMG_{photoTime}_{count}.jpg' # e.g., IMG_20210422_070707_X.jpg
count += 1
return new_photoName
def setName(photoPwd) :
'''
根据拍摄日期重命名照片
e.g., IMG_20210424_071829.jpg
'''
photoTime = getTime(photoPwd)
new_photoName = getNewName(photoTime) #获取新文件名,如果两张照片时分秒也相同,在最后增加后缀
new_photoPwd = os.path.join(folder, new_photoName)
os.rename(photoPwd, new_photoPwd)
def changePhotoName(folder):
"""
修改JPG照片的文件名为拍摄日期
e.g., IMG_20210424_071829.jpg
"""
for photoName in os.listdir(folder):
photoPwd = os.path.join(folder, photoName) # 照片的绝对路径
if checkFormat(photoPwd) == 'JPG' and checkExif(photoPwd): # 如果是JPG并且Exif包含时间信息
setName(photoPwd)
folder = r"D:\照片\测试" #文件夹路径
if __name__ == '__main__':
'''
folder: 文件夹路径
'''
changePhotoName(folder)
转载自:https://blog.csdn.net/lifeofwww/article/details/116094399