运用场景

前些天家人换了手机,在导入一些照片时发现相册APP中的照片排序混乱,好在照片名中有日期信息,就利用pyhton实现批量修改照片的相关时间
利用照片名中的日期批量修改照片的修改时间和访问时间 - 图1

代码实现

修改文件时间,首先想到的就是利用python中的time模块,代码如下

  1. import os,sys,time,re
  2. '''
  3. 利用utime模块,简单好用,但只能改 修改时间和访问时间,不能改创建时间
  4. '''
  5. # 将文件名中的空格替换为‘-’
  6. def space2bar(dirname, basename):
  7. newname = basename.replace(' ', '-')
  8. os.rename(os.path.join(dirname, basename), os.path.join(dirname, newname))
  9. return newname
  10. # 修改日期
  11. def modify_date(dirname, basename):
  12. """获取文件名中的时间格式,用于修改时间 """
  13. # 文件名正则表达式
  14. expression = r"\d{4}-\d{2}-\d{2}-\d{6}"
  15. if re.match(expression, basename):
  16. temp_str = basename.split('-')
  17. # 获取temp_str[4]的前4位作为时分
  18. hour_minute = temp_str[3][0:4]
  19. print(dirname+basename+'>>Modify_Date>>' +
  20. temp_str[0]+temp_str[1]+temp_str[2]+hour_minute)
  21. temp_time = time.strptime(
  22. temp_str[0]+temp_str[1]+temp_str[2]+hour_minute, '%Y%m%d%H%M')
  23. # 将strptime,返回用秒数来表示时间的浮点数
  24. mtime = time.mktime(temp_time)
  25. # mktime,修改文件的修改和访问时间
  26. os.utime(dirname+basename, (mtime, mtime))
  27. print("修改成功")
  28. else:
  29. print("文件名格式不符合")
  30. if __name__ == "__main__":
  31. file_path = r'D:\ProgramData\Python\Modify_date\2015-04-07 142409.jpg'
  32. basename = os.path.basename(file_path)
  33. dirname = os.path.dirname(file_path)+'\\'
  34. if len(basename.split(' ')) > 1:
  35. basename = space2bar(dirname, basename)
  36. modify_date(dirname, basename)

问题

利用time模块中的utime只能修改文件中的修改时间和访问时间,不能修改创建时间。下节继续利用win32file模块修改上述三个时间。