协慌网

登录 贡献 社区

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

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

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

答案

你有几个选择。首先,您可以使用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 数据的时间。 (感谢 kojiro 通过提供一个有趣的博客文章的链接在评论中更清楚地说明这一事实)

以跨平台方式获取某种修改日期很简单 - 只需调用os.path.getmtime( <i>path</i> ) ,您将获得上次修改path文件时的 Unix 时间戳。

另一方面,获取文件创建日期是繁琐且依赖于平台的,甚至在三个大型操作系统之间也是如此:

总而言之,跨平台代码看起来应该是这样的......

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.stat(filename).st_mtime

datetime 模块是最佳的操作时间戳,因此您可以将修改日期作为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)