在Linux和Windows上获得文件创建和修改日期/时间的最佳跨平台方法是什么?


当前回答

操作系统。Stat返回一个带有st_mtime和st_ctime属性的命名元组。在两个平台上,修改时间为st_mtime;不幸的是,在Windows中,ctime意味着“创建时间”,而在POSIX中它意味着“更改时间”。我不知道有什么方法可以在POSIX平台上获得创建时间。

其他回答

>>> import os
>>> os.stat('feedparser.py').st_mtime
1136961142.0
>>> os.stat('feedparser.py').st_ctime
1222664012.233
>>> 

最好的函数是os.path.getmtime()。在内部,这只是使用os.stat(filename).st_mtime。

datetime模块最适合操作时间戳,所以你可以像这样获得一个datetime对象的修改日期:

import os
import datetime
def modification_date(filename):
    t = os.path.getmtime(filename)
    return datetime.datetime.fromtimestamp(t)

使用的例子:

>>> d = modification_date('/var/log/syslog')
>>> print d
2009-10-06 10:50:01
>>> print repr(d)
datetime.datetime(2009, 10, 6, 10, 50, 1)

操作系统。Stat返回一个带有st_mtime和st_ctime属性的命名元组。在两个平台上,修改时间为st_mtime;不幸的是,在Windows中,ctime意味着“创建时间”,而在POSIX中它意味着“更改时间”。我不知道有什么方法可以在POSIX平台上获得创建时间。

如果下列符号链接不重要,也可以使用操作系统。lstat内置命令。

>>> os.lstat("2048.py")
posix.stat_result(st_mode=33188, st_ino=4172202, st_dev=16777218L, st_nlink=1, st_uid=501, st_gid=20, st_size=2078, st_atime=1423378041, st_mtime=1423377552, st_ctime=1423377553)
>>> os.lstat("2048.py").st_atime
1423378041.0

操作系统。Stat包含了创建时间。os.stat()中包含时间的元素没有st_anything的定义。

所以试试这个:

os.stat('feedparser.py')[8]

将其与ls -lah文件上的创建日期进行比较

它们应该是一样的。