Python获取文件访问时间异常及旧文件删除脚本问题排查
解决文件时间戳异常偏大的问题
嗨,我来帮你排查这个问题~先从几个关键点入手分析:
先搞懂时间戳的本质
你提到的st_atime和st_mtime返回的是Unix时间戳——也就是从1970年1月1日00:00:00 UTC开始累计的秒数,所以数值本身就会很大(比如2024年的时间戳大概在1.7×10⁹左右)。你觉得“异常偏大”,大概率是没把这个原始秒数转换成人类可读的日期格式。
试试用Python的datetime模块转换一下,就能看到正常的时间了:
import os from datetime import datetime file_path = "testFile1.txt" stat_data = os.stat(file_path) # 转换为可读格式 readable_mtime = datetime.fromtimestamp(stat_data.st_mtime) readable_atime = datetime.fromtimestamp(stat_data.st_atime) print(f"最后修改时间:{readable_mtime}") print(f"最后访问时间:{readable_atime}")
为什么打开文件后st_atime没更新?
如果转换后发现访问时间确实不对(比如刚打开文件但时间没变化),那可能是你的文件系统禁用了访问时间更新——这是很常见的性能优化设置:
- Linux系统中,很多ext4分区默认挂载了
noatime或relatime选项:noatime:完全不更新访问时间relatime:只有当修改时间晚于当前访问时间时,才更新访问时间
- 你可以用
mount命令查看自己的分区挂载选项,确认是不是这个原因。
替代方案
如果需要准确获取访问时间,可以试试这些办法:
- 调整文件系统挂载选项:把
noatime改成strictatime(强制更新访问时间),但这会牺牲一点磁盘性能,需要权衡。 - 用更简洁的API:Python 3.3+提供了
os.path.getatime()和os.path.getmtime(),本质和os.stat()一致,但代码更简洁:
from datetime import datetime import os.path print(f"最后访问时间:{datetime.fromtimestamp(os.path.getatime('testFile1.txt'))}") print(f"最后修改时间:{datetime.fromtimestamp(os.path.getmtime('testFile1.txt'))}")
- 区分跨平台差异:如果是Windows系统,
st_ctime代表文件创建时间;而Unix系统中st_ctime是文件元数据(比如权限)的修改时间,别搞混了。
内容的提问来源于stack exchange,提问作者Aksel
相关产品推荐
相关产品推荐

