利用文件时间批量重命名照片和视频

问题描述

承接上节的问题,在安卓和苹果间互导照片和视频还容易出现文件名混乱的问题,如下图所示。
利用文件时间批量重命名照片和视频_第1张图片

代码实现

为保证文件名的准确性,这里主要提取照片的拍摄时间和视频的修改时间用于重命名,这两个时间一般是其原始时间,实现代码如下:

import os
import re
import time
import exifread


def get_file_date(filepath, format):
    '''
        获取文件的时间戳,这里主要返回视频的时间,原时间一般为修改时间
        st_atime (访问时间), st_mtime (修改时间), st_ctime(创建时间)
    '''
    statinfo = os.stat(filepath)
    temp_time = time.localtime(statinfo.st_mtime)
    return time.strftime(format, temp_time)


def get_exif_date(filepath):
    # 获取照片的拍摄日期,利用exifread模块
    FIELD = 'EXIF DateTimeOriginal'
    fd = open(filepath, 'rb')
    tags = exifread.process_file(fd)
    fd.close()

    if FIELD in tags:
        temp_time = str(tags[FIELD])
        new_time = temp_time.replace(':', '').replace(' ', '_')
        return new_time
    else:
        new_time=''
        return new_time


def get_filetype(basename):
    '''
    利用正则表达式判断文件后缀,照片返回0,视频返回1,其他返回2
    '''
    img_reg = r'(\.JPG|\.jpg|\.bmp|\.png)'
    vedio_reg = r'(\.mp4|\.MP4|\.MOV|\.mov)'

    if re.search(img_reg, basename):  # 匹配照片
        return 0
    elif re.search(vedio_reg, basename):  # 匹配视频
        return 1
    else:
        return 2


if __name__ == "__main__":
    dirname = r'D:\资料\照片\15-18'
    os.chdir(dirname)  # 切换至当前目录
    basenames = os.listdir(dirname)
    format = '%Y%m%d_%H%M%S'  # 时间格式

    for basename in basenames:
        filepath = dirname+'\\'+basename
        num = get_filetype(basename)  #判定文件类型

        # 获取文件时间
        if num == 0:
            exif_time = str(get_exif_date(filepath))  # 获取照片拍摄时间
            if exif_time != '':
                str_time = exif_time
            else:
                str_time = str(get_file_date(filepath, format))  # 获取文件的修改时间
        elif num == 1:
            str_time = str(get_file_date(filepath, format))
        else:
            print(basename+"---文件格式不正确!")

        # 重命名
        file_suffix=os.path.splitext(basename)[1] #后缀名
        try:            
            newname = str_time+file_suffix
            os.rename(basename, newname)
            print(basename+'---重命名成功!')
        except Exception as e:
            if e.args[0] ==17: #重名
                newname=str_time+'-1'+file_suffix
                os.rename(basename,newname)
            else:
                print(e)
     

结论

最后修改结果如下。
利用文件时间批量重命名照片和视频_第2张图片

你可能感兴趣的:(python编程)