当前位置: 首页 > 面试题库 >

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

魏鸿哲
2023-03-14
问题内容

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

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


问题答案:

以跨平台的方式获取某种修改日期很容易-只需调用,你就会获得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


 类似资料:
  • 本文向大家介绍PHP中获取文件创建日期、修改日期、访问时间的方法,包括了PHP中获取文件创建日期、修改日期、访问时间的方法的使用技巧和注意事项,需要的朋友参考一下 php获取文件创建时间、修改时间常用代码 filemtime ( string filename ) 返回文件上次被修改的时间,出错时返回 FALSE。时间以 Unix 时间戳的方式返回,可用于 date()。 filectime (

  • 问题内容: 我在Debian GNU / Linux 6.0上使用Bash。是否可以获取文件创建日期/时间?不是修改日期/时间。 和两个只给出修改时间。 问题答案: 不幸的是,您的搜寻通常无法进行,因为POSIX标准定义了每个文件仅存储3个不同的时间值(请参见基本定义部分4.8文件时间更新)。 每个文件具有三个不同的关联时间戳:上次数据访问的时间,上次数据修改的时间以及文件状态上次更改的时间。这些

  • 问题内容: 我正在处理一批文件,这些文件包含有关同一对象生命周期不同时间的信息,而订购它们的唯一方法是按创建日期排序。我正在使用这个: 但这似乎不起作用。我究竟做错了什么?在Linux下还有其他更可靠/简单的方法来获取文件创建日期吗? 问题答案: fstat适用于文件描述符,而不适用于FILE结构。最简单的版本: 您需要通过检查sys / stat.h或使用某种autoconf构造来确定系统的st

  • 问题内容: 我正在阅读包含大量文件的文件夹。 如何获取文件的创建日期。我看不到任何直接功能来获取它。 有和。 如果文件没有被修改,会发生什么? 问题答案: 使用filectime。对于Windows,它将返回 创建 时间,而对于Unix,则将获得最好的 更改 时间,因为在Unix上没有创建时间(在大多数文件系统中)。 还要注意,在某些Unix文本中,文件的ctime称为文件的创建时间。错了 在大多

  • 我在databricks中安装了一个s3 bucket,我可以看到文件列表,也可以使用python读取文件 我想找出我正在阅读的文件的上次修改日期,我找不到太多,但java选项数据砖读取Azure blob的上次修改日期为azure blob,数据砖中有一个python本机选项来读取文件元数据。

  • 问题内容: 这是一个功能代码(成功创建文件) 现在,我尝试使用当前日期/时间来命名文件(我不是Python专家) 我想写出一个具有确切日期和时间的文件名,它是程序已经创建的一个xml文件,我只需要命名该文件即可。上面的代码不起作用。 错误返回: 问题答案: 不使用时,这可以解决您的问题(回答您的问题),该问题是使用您指定的当前时间和日期格式获取字符串: 产量: 因此您的文件名可以追加或使用此字符串