更新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):'''png2jpgps. 直接改文件后缀名,后续跑不通,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还是timewhile 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)

【Python】批量修改照片日期和文件名相关推荐

  1. 【Python】批量修改照片日期

    更新2022.09.09 代码已经大幅更新,需要的同学可以去这篇博客自取. 更新 2021.05.07 合并了修改照片的拍摄日期和文件名功能,请看:批量修改照片的拍摄日期和文件名 需求 最近整理老照片 ...

  2. 【Python】批量修改照片文件名为拍摄日期

    更新2022.09.09 代码已经大幅更新,需要的同学可以去这篇博客自取. 更新 2021.05.07 合并了修改照片的拍摄日期和文件名功能,请看:批量修改照片的拍摄日期和文件名 需求 最近整理老照片 ...

  3. 利用照片名中的日期批量修改照片的修改时间和访问时间(python实现)

    运用场景 前些天家人换了手机,在导入一些照片时发现相册APP中的照片排序混乱,好在照片名中有日期信息,就利用pyhton实现批量修改照片的相关时间 代码实现 修改文件时间,首先想到的就是利用pytho ...

  4. python批量修改文件名

    python之批量修改文件名 文章目录 python之批量修改文件名 前言 一.python批量修改文件名 1.源码 二.python批量修改文件名(按顺序) 1.源码 三.python批量修改文件名 ...

  5. python 修改文件名_【学习分享】利用python批量修改文件名

    1 前言 分享一个利用python批量修改文件名的方法,我们以前分享过用DOS命令来批量修改文件名,但是如果要修改多个文件夹内的文件名,用DOS命令就不好处理了,我们就来分享一下如何用python处理 ...

  6. c语言;文件名批量修改要求可以修改整个文件内文件名或后缀名自动,Python批量修改文件名...

    处理语料库时,有些文件名字很不规则,为了方便处理,同义按数字顺序修改名称,主要是用到os模块: import os def RenameFiles(srcdir): #将目录下所有的文件命名为数字开头 ...

  7. 如何批量修改文件名?批量修改照片文件名和添加前缀

    通常我们使用手机或者相机拍摄了一堆照片拷贝到电脑之后,照片的命名通常都是随机混乱的,如果要规范文件命名,你是不是会去一个一个去修改文件名呢?其实完全不需要这么麻烦,今天电脑百事小编就来教大家一个批量快 ...

  8. python批量修改文件名(将中文改为英文首字母)和xml文件

    数据集中有中文,网络训练中报错,因此需要把其中的中文替换为英文. 01 批量修改文件名 利用python批量修改文件名,把文件名中的汉字自动替换成其首字母. import os; import pyp ...

  9. 计算机怎么快速改图片名称,如何批量修改文件名?批量修改照片文件名和添加前缀方法...

    通常我们使用手机或者相机拍摄了一堆照片拷贝到电脑之后,照片的命名通常都是随机混乱的,如果要规范文件命名,你是不是会去一个一个去修改文件名呢?其实完全不需要这么麻烦,今天电脑百事小编就来教大家一个批量快 ...

最新文章

  1. 如何kill掉tomcat服务
  2. 超图桌面版加载obj 3D模型 - 2
  3. stl 基于哈希的map c++_【C++】一文带你入门 STL
  4. Juniper Firewall多进单出配制实例
  5. DBCP连接池配置常用参数说明
  6. 数集合有多少个TOJ(2469)
  7. cad完全卸载教程_CAD室内设计中厨房布置实例
  8. nginx只能访问80端口_nginx 访问不了非80端口
  9. netty 远程主机强迫关闭了一个现有的连接_死磕netty系列《一、netty基础概念》...
  10. android studio第三方调试,Android Studio直接运行调试签名包
  11. ribbon重试机制
  12. BG2EE 术士solo
  13. 基于VHDL语言的数字电子钟设计
  14. 图像入门——2. 数字图像发展历史与图像处理概述
  15. python 对 PDF 的拆分 和合并
  16. Python抽奖转盘、幸运大转盘源程序
  17. 2021Q2产品团队绩效总结--管理日记
  18. vue3.0项目打包后,由于vender.js 文件过大引起的首页加载时间缓慢的解决方式
  19. DataFrame的元素选择与赋值
  20. 中国的生存法则变了,你再不懂就晚了

热门文章

  1. C++函数的递归调用
  2. 关于hxxp //www hj234 com的问题
  3. 路在何方?前途迷茫,去不去HP?
  4. Chemdraw —— SMILES与二维结构之间的互相转换
  5. 安全性-身份验证和授权(一)之Principal
  6. 程序员的情感修养 —— 专访“非诚勿扰”牵手成功男嘉宾程序员石川
  7. mybatis一级缓存、二级缓存以及集成EnCache、Redis,避免脏读
  8. 日本股神是川银藏:从店员到炒股大王
  9. filtering and hybrid images
  10. JAVA性能优化,让程序更快更稳定