问题
用mylio整理照片,发现它会按照照片的拍照时间自动对照片归类。但是,有的视频的时间明显不对,一番折腾后发现问题所在
很明显,照片的创建时间和修改时间不对,对比下文件名就知道了,而mylio是按照创建时间来归类的
要是一个文件也就罢了,但是这些年实在攒了太多视频了,例如2017年视频被放到2018年的文件
还是写个脚本批量修改吧
解决过程
搜了很久,网上主要是修改访问时间atime
和修改时间mtime
,通过os.utime(filename,(atime,mtime))
方法来做,但是,没有简单的修改创建时间ctime
的方法
发现了这个
https://github.com/Delgan/win32-setctime
使用pip安装后,可以使用
from win32_setctime import setctime
setctime("my_file.txt", 1561675987.509)
那串数字是epoch time,所以,需要将时间转换为epoch time,使用time.strptime()
和time.mktime()
即可
测试下
>>> import time
>>> filename='VID_20170919_223923.mp4'
>>> pattern='VID_%Y%m%d_%H%M%S.mp4'
>>> newtime=time.strptime(filename,pattern)
>>> newtime
Out[7]: time.struct_time(tm_year=2017, tm_mon=9, tm_mday=19, tm_hour=22, tm_min=39, tm_sec=23, tm_wday=1, tm_yday=262, tm_isdst=-1)
>>> newtime_stamp=time.mktime(newtime)
>>> from win32_setctime import setctime
>>> setctime(filename, newtime_stamp)
>>> import os
>>> os.utime(filename,(newtime_stamp,newtime_stamp))
成功!
最终方案
from win32_setctime import setctime
import time
import os
filenames=os.listdir()
for filename in filenames:
# check whether it has the form VID_....mp4
filename=filename.strip()
if filename.startswith('VID') and filename.endswith('.mp4'):
print(filename)
pattern='VID_%Y%m%d_%H%M%S.mp4'
newtime=time.strptime(filename,pattern)
newtime_stamp=time.mktime(newtime)
setctime(filename,newtime_stamp)
os.utime(filename,(newtime_stamp,newtime_stamp))