Windows 系统中的文件和时间有关的属性共有三个,分别是:创建时间、修改时间和访问时间。本文介绍如何利用 Python 编程获取或修改这三个属性。
os.path.getctime(path)(联想记忆:create);os.path.getmtime(path)(联想记忆:modify);os.path.getatime(path)(联想记忆:access)。os.utime 只能更改文件的修改时间和访问时间,而不能更改文件的创建时间。因此,我们这里统一使用 win32file 模块来修改文件的上述三个时间属性。
首先,创建一个测试文件。
with open("test", "wb") as fp:
pass
然后,鼠标右击查看其时间属性。

通过如下代码获取其时间属性。
import os
from datetime import datetime
ctime = os.path.getctime("test")
ctime_string = datetime.fromtimestamp(int(ctime))
mtime = os.path.getmtime("test")
mtime_string = datetime.fromtimestamp(int(ctime))
atime = os.path.getatime("test")
atime_string = datetime.fromtimestamp(int(ctime))
print(
f"创建时间:{ctime_string}",
f"修改时间:{mtime_string}",
f"访问时间:{atime_string}",
sep="\n"
)
'''输出
创建时间:2022-09-18 23:24:06
修改时间:2022-09-18 23:24:06
访问时间:2022-09-18 23:24:06
'''
通过如下代码修改其时间属性。
import win32file
from datetime import datetime
new_ctime = datetime.strptime("2021-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
new_mtime = datetime.strptime("2022-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
new_atime = datetime.strptime("2023-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
handle = win32file.CreateFile(
"test",
win32file.GENERIC_READ | win32file.GENERIC_WRITE,
0,
None,
win32file.OPEN_EXISTING,
0,
0,
)
win32file.SetFileTime(handle, new_ctime, new_atime, new_mtime) # 注意这里的顺序,访问时间在前,修改时间在后
win32file.CloseHandle(handle)
重新查看时间属性,发现已修改。
