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

发布于 2021-02-02 23:22:42

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

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

关注者
0
被浏览
124
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    以跨平台的方式获取某种修改日期很容易-只需调用,你就会获得Unix时间戳,该时间戳是文件的最后修改时间。os.path.getmtime(path)path

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

    Windows上,文件的存储日期ctime(在https://msdn.microsoft.com/zh-cn/library/14h5k7ff.aspx中记录)。你可以通过os.path.getctime()或通过.st_ctime调用的结果属性在Python中进行访问os.stat()。在Unix 上一次更改文件的属性或内容的 Unix上,这将不起作用。ctime
    在Mac以及其他一些基于Unix的操作系统上,你可以使用.st_birthtime调用结果的属性os.stat()。
    Linux上,当前是不可能的,至少没有为Python编写C扩展。尽管一些Linux常用的文件系统确实存储了创建日期(例如,ext4将它们存储在中st_crtime),但是Linux内核无法提供访问它们的方法;特别是从stat()最新的内核版本开始,它从C中的调用返回的结构不包含任何创建日期字段。你还可以看到,该标识符st_crtime当前在Python源代码中没有显示。至少在打开时ext4,数据会附加到文件系统中的inode上,但是没有方便的访问方法。

    在Linux上,第二好的事情是mtime通过结果的一个os.path.getmtime()或两个.st_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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看