如何在Python中获取文件创建和修改日期/时间?
我有一个脚本需要根据文件创建和修改日期做一些事情,但必须在Linux和Windows上运行。
什么是在Python中获取文件创建和修改日期/时间的最佳跨平台方式?
以跨平台的方式获取某种修改日期非常简单 - 只需调用os.path.getmtime(path)
,就可以得到上次修改path
文件时的Unix时间戳。
另一方面,获取文件创建日期依赖于平台和平台,甚至在三大操作系统之间也有所不同:
ctime
(记录在https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx)存储其创建日期。 您可以通过os.path.getctime()
或调用os.stat()
的结果的.st_ctime
属性在Python中访问它。 这在Unix上不起作用,其中ctime
是文件属性或内容被更改的最后一次。 os.stat()
的结果的.st_birthtime
属性。 在Linux上 ,目前这是不可能的,至少不用为Python编写C扩展。 尽管一些通常用于Linux的文件系统确实存储了创建日期(例如, ext4
将它们存储在st_crtime
),但Linux内核无法访问它们; 特别是它从C中的stat()
调用返回的结构,从最新的内核版本开始,不包含任何创建日期字段。 您还可以看到标识符st_crtime
当前不在Python源代码中的任何位置。 至少在ext4
,数据会附加到文件系统中的inode,但没有方便的方式访问它。
Linux上的下一个最好的事情是通过os.path.getmtime()
或os.stat()
结果的.st_mtime
属性访问文件的mtime
。 这会给你上次文件内容被修改的时间,这对某些用例可能是足够的。
综合起来,跨平台代码应该看起来像这样...
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))
注意 : ctime()
不会引用* nix系统上的创建时间,而是上次inode数据更改时的时间。 (感谢高二郎通过提供一个有趣的博客文章的链接,使这一事实在评论中更加清晰)
最好的函数是os.path.getmtime()。 在内部,这只是使用os.stat(filename).st_mtime
。
日期时间模块是最佳操作时间戳,因此您可以将修改日期作为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)
链接地址: http://www.djcxy.com/p/20005.html
上一篇: How to get file creation & modification date/times in Python?