如何获取文件创建和修改日期/时间?
获取文件创建和修改日期/时间的最佳跨平台方法是什么,这适用于Linux和Windows?
以跨平台的方式获取某种修改日期很容易 - 只需调用os.path.getmtime(path),
您将获得上次修改文件的Unix时间戳。path
另一方面,获取文件创建日期是繁琐的,并且依赖于平台,甚至在三个主要操作系统之间也有所不同:
os.path.getctime() 或调用 os.stat()
的结果的 .st_ctime
属性在 Python 中访问它。
这在Unix上不起作用,Unix是上次更改文件的属性或内容的时间。ctime
ctime
的结果的 .st_birthtime
属性。os.stat()
在Linux上,这目前是不可能的,至少如果没有为Python编写C扩展。尽管一些通常与Linux一起使用的文件系统确实存储了创建日期(例如,将它们存储在 中),但Linux内核不提供访问它们的方法;特别是,从C中的调用返回的结构,从最新的内核版本开始,不包含任何创建日期字段。您还可以看到该标识符当前在 Python 源代码中的任何位置都没有功能。至少如果您处于 上,则数据将附加到文件系统中的 inode,但是没有方便的方法来访问它。ext4
st_crtime
stat()
st_crtime
ext4
Linux 上下一个最好的办法是通过 os.path.getmtime()
或结果的 .st_mtime
属性访问文件的 。这将为您提供上次修改文件内容的时间,这对于某些用例可能就足够了。mtime
os.stat()
把这些放在一起,跨平台代码应该看起来像这样......
import os
import platform
def creation_date(path_to_file):
"""
Try to get the date that a file was created, falling back to when it was
last modified if that isn't possible.
See http://stackoverflow.com/a/39501288/1709587 for explanation.
"""
if platform.system() == 'Windows':
return os.path.getctime(path_to_file)
else:
stat = os.stat(path_to_file)
try:
return stat.st_birthtime
except AttributeError:
# We're probably on Linux. No easy way to get creation dates here,
# so we'll settle for when its content was last modified.
return stat.st_mtime
您有几种选择。首先,您可以使用 os.path.getmtime
和 os.path.getctime
函数:
import os.path, time
print("last modified: %s" % time.ctime(os.path.getmtime(file)))
print("created: %s" % time.ctime(os.path.getctime(file)))
您的另一个选择是使用 os.stat
:
import os, time
(mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(file)
print("last modified: %s" % time.ctime(mtime))
注意:不是指 *nix 系统上的创建时间,而是指 inode 数据上次更改的时间。(感谢kojiro通过提供指向有趣博客文章的链接,在评论中使这一事实更加清晰。ctime()