运用场景
前些天家人换了手机,在导入一些照片时发现相册APP中的照片排序混乱,好在照片名中有日期信息,就利用pyhton实现批量修改照片的相关时间
代码实现
修改文件时间,首先想到的就是利用python中的time模块,代码如下
import os,sys,time,re
'''
利用utime模块,简单好用,但只能改 修改时间和访问时间,不能改创建时间
'''
# 将文件名中的空格替换为‘-’
def space2bar(dirname, basename):
newname = basename.replace(' ', '-')
os.rename(os.path.join(dirname, basename), os.path.join(dirname, newname))
return newname
# 修改日期
def modify_date(dirname, basename):
"""获取文件名中的时间格式,用于修改时间 """
# 文件名正则表达式
expression = r"\d{4}-\d{2}-\d{2}-\d{6}"
if re.match(expression, basename):
temp_str = basename.split('-')
# 获取temp_str[4]的前4位作为时分
hour_minute = temp_str[3][0:4]
print(dirname+basename+'>>Modify_Date>>' +
temp_str[0]+temp_str[1]+temp_str[2]+hour_minute)
temp_time = time.strptime(
temp_str[0]+temp_str[1]+temp_str[2]+hour_minute, '%Y%m%d%H%M')
# 将strptime,返回用秒数来表示时间的浮点数
mtime = time.mktime(temp_time)
# mktime,修改文件的修改和访问时间
os.utime(dirname+basename, (mtime, mtime))
print("修改成功")
else:
print("文件名格式不符合")
if __name__ == "__main__":
file_path = r'D:\ProgramData\Python\Modify_date\2015-04-07 142409.jpg'
basename = os.path.basename(file_path)
dirname = os.path.dirname(file_path)+'\\'
if len(basename.split(' ')) > 1:
basename = space2bar(dirname, basename)
modify_date(dirname, basename)
问题
利用time模块中的utime只能修改文件中的修改时间和访问时间,不能修改创建时间。下节继续利用win32file模块修改上述三个时间。