问题描述
承接上节的问题,在安卓和苹果间互导照片和视频还容易出现文件名混乱的问题,如下图所示。
代码实现
为保证文件名的准确性,这里主要提取照片的拍摄时间和视频的修改时间用于重命名,这两个时间一般是其原始时间,实现代码如下:
import osimport reimport timeimport exifreaddef 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_timeelse:new_time=''return new_timedef 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 0elif re.search(vedio_reg, basename): # 匹配视频return 1else:return 2if __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+'\\'+basenamenum = get_filetype(basename) #判定文件类型# 获取文件时间if num == 0:exif_time = str(get_exif_date(filepath)) # 获取照片拍摄时间if exif_time != '':str_time = exif_timeelse: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_suffixos.rename(basename, newname)print(basename+'---重命名成功!')except Exception as e:if e.args[0] ==17: #重名newname=str_time+'-1'+file_suffixos.rename(basename,newname)else:print(e)
结论
最后修改结果如下。
