You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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命令查看自己的分区挂载选项,确认是不是这个原因。

替代方案

如果需要准确获取访问时间,可以试试这些办法:

  1. 调整文件系统挂载选项:把noatime改成strictatime(强制更新访问时间),但这会牺牲一点磁盘性能,需要权衡。
  2. 用更简洁的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'))}")
  1. 区分跨平台差异:如果是Windows系统,st_ctime代表文件创建时间;而Unix系统中st_ctime是文件元数据(比如权限)的修改时间,别搞混了。

内容的提问来源于stack exchange,提问作者Aksel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:16:43