为什么Python os模块输出始终为纪元时间,stat属性取值不符合预期
问题根源
- 你混淆了
stat模块的常量定义和os.stat()返回的文件属性结果:stat.ST_SIZE、stat.ST_MTIME、stat.ST_ATIME本质是固定的整数索引,用来定位stat结果元组里的对应属性,本身不存储任何目标文件的属性值。 - 你调用了
os.stat("abc.txt")但没有将返回的结果对象保存,后续打印时直接使用了stat模块的固定常量,这些常量本身数值很小,转换为时间戳后自然就是接近1970年的纪元时间,和你目标文件的实际属性完全无关。
解决方法
先保存os.stat()的返回结果,再从结果中读取对应属性即可,有两种合法的取值写法:
- 直接读取结果对象的属性(更简洁,推荐)
- 配合stat模块的常量作为索引取值
修正后的可运行代码如下:
import os import datetime import stat # 保存os.stat返回的文件属性对象 file_stat = os.stat("abc.txt") # 写法1:直接读属性,获取文件实际属性值 print("File size in byte is:", file_stat.st_size) print("File last modified is:", datetime.datetime.fromtimestamp(file_stat.st_mtime)) # 如果确实需要访问时间固定输出纪元时间,保留原始的stat.ST_ATIME写法即可 print("File last accessed is:", datetime.datetime.fromtimestamp(stat.ST_ATIME)) # 写法2:用stat常量做索引,和你的原始写法逻辑更接近 # print("File size in byte is:", file_stat[stat.ST_SIZE]) # print("File last modified is:", datetime.datetime.fromtimestamp(file_stat[stat.ST_MTIME])) # print("File last accessed is:", datetime.datetime.fromtimestamp(stat.ST_ATIME))
内容的提问来源于stack exchange,提问作者Deepak Kumar
相关产品推荐
相关产品推荐

