在跨平台的环境中获取文件的修改日期/时间非常简单,只需要调用 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
代码解释
- 导入模块:导入必要的
os
和platform
模块。 - 定义函数:定义
creation_date
函数,用于获取文件的创建日期。 - 判断操作系统:通过
platform.system()
判断操作系统。如果是Windows系统,调用os.path.getctime()
获取文件创建日期。 - 获取文件属性:对于非Windows系统,使用
os.stat()
获取文件属性。 - 尝试获取创建日期:尝试从文件属性中获取
.st_birthtime
属性。如果获取失败(例如在Linux系统上),则返回文件的修改日期。
通过这种方式,能够在大多数常见的操作系统中获取文件的创建或修改日期,满足基本的使用需求。