Skip to content

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

Posted on:2024年6月24日 at 21:51

在跨平台的环境中获取文件的修改日期/时间非常简单,只需要调用 os.path.getmtime(path) 就可以得到文件最后一次被修改的Unix时间戳。

然而,获取文件的创建日期则较为复杂,并且在不同操作系统中有不同的实现方式,具体如下:

Windows系统

在Windows系统中,文件的 ctime (可以参考微软文档)存储的是文件的创建日期。我们可以通过 os.path.getctime() 或者 os.stat() 返回结果中的 .st_ctime 属性来访问文件的创建日期。

Mac系统

在Mac系统以及其他一些Unix系统中,可以使用 os.stat() 返回结果中的 .st_birthtime 属性来获取文件的创建日期。

Linux系统

在Linux系统中,获取文件的创建日期目前是不可能的,至少在不编写Python的C扩展的情况下。尽管一些文件系统(例如ext4)会存储文件的创建日期(存储在 st_crtime 中),但Linux内核并没有提供访问它们的方法。Python的源代码中也没有 st_crtime 的相关标识符。

在Linux系统中,可以通过 os.path.getmtime() 或者 os.stat() 返回结果中的 .st_mtime 属性来获取文件的修改日期。尽管这不是文件的创建日期,但在某些使用场景下,这已经足够了。

跨平台的代码实现

综合上述信息,以下是一个跨平台获取文件创建日期的示例代码。如果无法获取创建日期,将会返回文件的修改日期:

import os
import platform

def creation_date(path_to_file):
    """
    尝试获取文件的创建日期,如果无法获取,则返回文件的修改日期。
    """
    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:
            # 可能是在Linux系统。这里没有简单的方法获取创建日期,因此返回文件的修改日期。
            return stat.st_mtime

代码解释

  1. 导入模块:导入必要的 osplatform 模块。
  2. 定义函数:定义 creation_date 函数,用于获取文件的创建日期。
  3. 判断操作系统:通过 platform.system() 判断操作系统。如果是Windows系统,调用 os.path.getctime() 获取文件创建日期。
  4. 获取文件属性:对于非Windows系统,使用 os.stat() 获取文件属性。
  5. 尝试获取创建日期:尝试从文件属性中获取 .st_birthtime 属性。如果获取失败(例如在Linux系统上),则返回文件的修改日期。

通过这种方式,能够在大多数常见的操作系统中获取文件的创建或修改日期,满足基本的使用需求。