我正在用Python编写一个程序,需要比较几个目录的atime,mtime和ctime。为此我使用os.stat("my_directory/")
。我得到的结果是包含这些时间的字符串。对于我有一个示例目录:
st_atime=1418911410L
st_mtime=1418911410L
st_ctime=1404656050L
我的问题是我对这些数字感到困惑。我想知道这些数字是否可转换为实际时间?或者,如果一个数字(比如ctime)小于另一个数字(比如atime),是否意味着ctime早于atime或更晚?我搜索了许多网站来了解这一点,但我的尝试没有取得成功。谁能帮助我?提前致谢。
答案 0 :(得分:4)
ctime - 文件的inode最后一次更改(例如更改权限,重命名文件等)。
mtime - 上次更改文件的内容时
atime - 上次访问文件的时间。
这些数字只是unix时间戳 - 签名为32位整数,代表自1970年1月1日以来的秒数,也就是纪元。
是的,较小的数字=较早的时间。
答案 1 :(得分:2)
您可以使用以下Python代码将这些时间戳转换为datetime
个对象:
import datetime
datetime.datetime.fromtimestamp(1418911410L) # or whatever number you have
答案 2 :(得分:2)
引用os.stat()
function documentation:
注意:
st_atime
,st_mtime
和st_ctime
属性的确切含义和分辨率取决于操作系统和文件系统。例如,在使用FAT或FAT32文件系统的Windows系统上,st_mtime
的分辨率为2秒,而st_atime
的分辨率仅为1天。有关详细信息,请参阅操作系统文档。
对于Linux,该系统文档是stat (2)
manpage:
struct timespec st_atim; /* time of last access */
struct timespec st_mtim; /* time of last modification */
struct timespec st_ctim; /* time of last status change */
man time(2)
中定义了timespec
:
它的时间代表自纪元以来的秒和纳秒。
其中Epoch是UNIX Epoch。值越高,自该纪元(1970年1月1日,午夜UTC)起经过的时间越长。
Python time
module以相同的方式及时处理,datetime
module有类方法,它们也会从这样的值中为您提供datetime
对象:< / p>
>>> import datetime
>>> datetime.datetime.fromtimestamp(1418911410L)
datetime.datetime(2014, 12, 18, 14, 3, 30)
如上所示,这三个字段分别代表访问时间,修改时间和状态更改时间。
答案 3 :(得分:1)
您可以使用stat模块解释stat()
结果并从纪元转换为日期时间,从中获得有用的信息:
import os
import datetime
print datetime.datetime.fromtimestamp(os.stat(".").st_atime)
这将打印出一个datetime对象,显示上次访问当前目录的时间:
datetime.datetime(2014, 12, 17, 7, 19, 14, 947384)
答案 4 :(得分:1)
除了其他示例之外,strftime
也可以做到这一点,
time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1418911410))