如何在Python中获取文件创建和修改日期/时间?

我有一个脚本需要根据文件创建和修改日期做一些事情,但必须在Linux和Windows上运行。

什么是在Python中获取文件创建和修改日期/时间的最佳跨平台方式?


以跨平台的方式获取某种修改日期非常简单 - 只需调用os.path.getmtime(path) ,就可以得到上次修改path文件时的Unix时间戳。

另一方面,获取文件创建日期依赖于平台和平台,甚至在三大操作系统之间也有所不同:

  • Windows上 ,文件的ctime (记录在https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx)存储其创建日期。 您可以通过os.path.getctime()或调用os.stat()的结果的.st_ctime属性在Python中访问它。 这在Unix上不起作用,其中ctime是文件属性或内容被更改的最后一次。
  • Mac以及其他一些基于Unix的操作系统上,可以使用调用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.getmtimeos.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?

    下一篇: Python: What OS am I running on?