为啥 Python 中的 OS 模块仅提供 Epoche Time 标准的输出?

Posted

技术标签:

【中文标题】为啥 Python 中的 OS 模块仅提供 Epoche Time 标准的输出?【英文标题】:Why OS Module in Python giving output of Epoche Time standard only?为什么 Python 中的 OS 模块仅提供 Epoche Time 标准的输出? 【发布时间】:2021-10-22 18:40:09 【问题描述】:

为什么 Epoche Time 标准一次又一次地出现在我的输出中。我希望在 stat.ST_ATIME 中有我的 Epoche Time 标准输出,但它在我的两个输出中都存在。

输入:

import os
import datetime
import stat

os.stat("abc.txt")

print("File size in byte is:",stat.ST_SIZE)
print("File last modified is:",datetime.datetime.fromtimestamp(stat.ST_MTIME))
print("File last accessed is:",datetime.datetime.fromtimestamp(stat.ST_ATIME))

输出:

File size in byte is: 6    
File last modified is: 1970-01-01 05:00:08
File last accessed is: 1970-01-01 05:00:07

预期:

File size in byte is: 6
File last modified is: 2021-08-21 05:00:08
File last accessed is: 1970-01-01 05:00:07

【问题讨论】:

【参考方案1】:

stat.ST_MTIME 不是时候。这是一个固定的编程常数。是整数值8

>>> import stat
>>> stat.ST_MTIME
8

os.stat() 返回您要查看的结构,请参阅os.stat_result documentation。您的代码忽略了返回的对象,您想将其存储在一个变量中,然后使用该变量的属性:

import os
from datetime import datetime

stat_result = os.stat("abc.txt")

print("File size in byte is:", stat_result.st_size)
print("File last modified is:", datetime.fromtimestamp(stat_result.st_mtime))
print("File last accessed is:", datetime.fromtimestamp(stat_result.st_mtime))

stat.ST_* constants 是 os.stat() 返回的命名元组的索引,但这里不需要它们,因为命名元组也支持命名属性。

您应该更喜欢使用命名属性,因为您可能会得到更详细的值stat_result.st_mtime 属性为您提供 stat_result.st_mtime_ns 值除以 10 亿的值,而 stat_result[8]stat_result[stat.ST_MTIME] 为您提供四舍五入到整秒的值:

>>> open("abc.txt", "w").write("Some example text into the file\n")
32
>>> stat_result = os.stat("abc.txt")
>>> stat_result.st_mtime
1629566790.0892947
>>> stat_result.st_mtime_ns
1629566790089294590
>>> stat_result.st_mtime_ns / (10 ** 9)
1629566790.0892947
>>> stat_result[stat.ST_MTIME]
1629566790

使用索引为您提供整数,以便向后兼容旧代码。

【讨论】:

以上是关于为啥 Python 中的 OS 模块仅提供 Epoche Time 标准的输出?的主要内容,如果未能解决你的问题,请参考以下文章

Python知识:实用程序模块基础——OS模块

Python的进程

python ossys模块时间模块正则表达式

python 中的os模块

Python常用标准库之os

Python常用标准库之os