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

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


#1楼

最好的功能是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)

#2楼

通过运行系统的stat命令并解析输出,我能够在posix上获得创建时间。

commands.getoutput('stat FILENAME').split('\"')[7]

从终端(OS X)在python外部运行stat返回:

805306374 3382786932 -rwx------ 1 km staff 0 1098083 "Aug 29 12:02:05 2013" "Aug 29 12:02:05 2013" "Aug 29 12:02:20 2013" "Aug 27 12:35:28 2013" 61440 2150 0 testfile.txt

...其中第四个datetime是文件创建时间(而不是ctime更改时间,如其他注释所述)。


#3楼

os.stat https://docs.python.org/2/library/stat.html#module-stat

编辑:在较新的代码中,您可能应该使用os.path.getmtime() (感谢Christian Oudard)
但是请注意,它返回的time_t浮点值只有小数秒(如果您的操作系统支持)


#4楼

您有两种选择。 首先,可以使用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通过提供指向有趣的博客文章的链接使评论中的事实更加清楚)


#5楼

有两种获取mod时间的方法,os.path.getmtime()或os.stat(),但是ctime不是可靠的跨平台(请参见下文)。

os.path.getmtime()

getmtime路径
返回路径的最后修改时间。 返回值是一个数字,给出自纪元以来的秒数(请参见时间模块)。 如果文件不存在或不可访问,请引发os.error。 1.5.2版中的新功能。 在版本2.3中更改:如果os.stat_float_times()返回True,则结果为浮点数。

os.stat()

statpath
在给定路径上执行stat()系统调用。 返回值是一个对象,其属性与stat结构的成员相对应,即:st_mode(保护位),st_ino(索引节点号),st_dev(设备),st_nlink(硬链接数),st_uid(所有者的用户ID) ),st_gid(所有者的组ID),st_size(文件大小,以字节为单位),st_atime(最新访问时间), st_mtime (最新内容修改时间), st_ctime (取决于平台;最新元数据更改的时间)在Unix上,或在Windows上创建的时间)

>>> import os
>>> statinfo = os.stat('somefile.txt')
>>> statinfo
(33188, 422511L, 769L, 1, 1032, 100, 926L, 1105022698,1105022732, 1105022732)
>>> statinfo.st_size
926L
>>>

在上面的示例中,您将使用statinfo.st_mtime或statinfo.st_ctime分别获取mtime和ctime。


#6楼

os.stat返回具有st_mtimest_ctime属性的命名元组。 在两个平台上,修改时间均为st_mtime 。 不幸的是,在Windows上, ctime表示“创建时间”,而在POSIX上则表示“更改时间”。 我不知道有什么方法可以在POSIX平台上获得创建时间。


#7楼

>>> import os
>>> os.stat('feedparser.py').st_mtime
1136961142.0
>>> os.stat('feedparser.py').st_ctime
1222664012.233
>>>

#8楼

如果遵循符号链接并不重要,则也可以使用os.lstat内置。

>>> os.lstat("2048.py")
posix.stat_result(st_mode=33188, st_ino=4172202, st_dev=16777218L, st_nlink=1, st_uid=501, st_gid=20, st_size=2078, st_atime=1423378041, st_mtime=1423377552, st_ctime=1423377553)
>>> os.lstat("2048.py").st_atime
1423378041.0

#9楼

os.stat确实包括创建时间。 包含时间的os.stat()元素没有st_anything的定义。

所以试试这个:

os.stat('feedparser.py')[8]

将其与您在ls -lah中的文件上的创建日期进行比较

它们应该是相同的。


#10楼

) and you'll get the Unix timestamp of when the file at path was last modified. 以跨平台的方式获取某种修改日期很容易-只需调用os.path.getmtime( ) ,您将获得Unix时间戳记,该时间戳是path上文件的最后修改时间。

另一方面,获取文件创建日期是不固定的,且取决于平台,即使在三个大型操作系统之间也有所不同:

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

    在Linux上,下一件好事是通过os.path.getmtime()os.stat()结果的.st_mtime属性访问文件的mtime 。 这将为您提供最后一次修改文件内容的时间,这对于某些用例可能已经足够。

综上所述,跨平台代码应如下所示:

import os
import platformdef creation_date(path_to_file):"""Try to get the date that a file was created, falling back to when it waslast 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_birthtimeexcept 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

#11楼

在Python 3.4及更高版本中,您可以使用面向对象的pathlib模块接口,该接口包括许多os模块的包装器。 这是获取文件统计信息的示例。

>>> import pathlib
>>> fname = pathlib.Path('test.py')
>>> assert fname.exists(), f'No such file: {fname}'  # check that the file exists
>>> print(fname.stat())
os.stat_result(st_mode=33206, st_ino=5066549581564298, st_dev=573948050, st_nlink=1, st_uid=0, st_gid=0, st_size=413, st_atime=1523480272, st_mtime=1539787740, st_ctime=1523480272)

有关os.stat_result包含的内容的更多信息,请参考文档 。 对于修改时间,您需要fname.stat().st_mtime

>>> import datetime
>>> mtime = datetime.datetime.fromtimestamp(fname.stat().st_mtime)
>>> print(mtime)
datetime.datetime(2018, 10, 17, 10, 49, 0, 249980)

如果要在Windows上创建时间,或者在Unix上需要最新的元数据更改,则可以使用fname.stat().st_ctime

>>> ctime = datetime.datetime.fromtimestamp(fname.stat().st_ctime)
>>> print(ctime)
datetime.datetime(2018, 4, 11, 16, 57, 52, 151953)

本文提供了有关pathlib模块的更多有用信息和示例。


#12楼

import os, time, datetimefile = "somefile.txt"
print(file)print("Modified")
print(os.stat(file)[-2])
print(os.stat(file).st_mtime)
print(os.path.getmtime(file))print()print("Created")
print(os.stat(file)[-1])
print(os.stat(file).st_ctime)
print(os.path.getctime(file))print()modified = os.path.getmtime(file)
print("Date modified: "+time.ctime(modified))
print("Date modified:",datetime.datetime.fromtimestamp(modified))
year,month,day,hour,minute,second=time.localtime(modified)[:-3]
print("Date modified: %02d/%02d/%d %02d:%02d:%02d"%(day,month,year,hour,minute,second))print()created = os.path.getctime(file)
print("Date created: "+time.ctime(created))
print("Date created:",datetime.datetime.fromtimestamp(created))
year,month,day,hour,minute,second=time.localtime(created)[:-3]
print("Date created: %02d/%02d/%d %02d:%02d:%02d"%(day,month,year,hour,minute,second))

版画

somefile.txt
Modified
1429613446
1429613446.0
1429613446.0Created
1517491049
1517491049.28306
1517491049.28306Date modified: Tue Apr 21 11:50:46 2015
Date modified: 2015-04-21 11:50:46
Date modified: 21/04/2015 11:50:46Date created: Thu Feb  1 13:17:29 2018
Date created: 2018-02-01 13:17:29.283060
Date created: 01/02/2018 13:17:29

#13楼

可能值得看看crtime库,该库实现了对文件创建时间的跨平台访问。

from crtime import get_crtimes_in_dirfor fname, date in get_crtimes_in_dir(".", raise_on_error=True, as_epoch=False):print(fname, date)# file_a.py Mon Mar 18 20:51:18 CET 2019

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

  1. linux可以修改日期格式吗,如何在Linux中使用date命令修改日期时间

    Linux中可使用date命令查看修改日期及时间,本例中以CentOS6为例说明. 1.直接输入"date"可查看当前系统日期及时间(普通用户即可执行此命令). 2.输入" ...

  2. 如何在Python中获取图片分辨率?——Python实现获取图片分辨率的代码及详解。

    如何在Python中获取图片分辨率?--Python实现获取图片分辨率的代码及详解. 在进行图片处理或者图片分析的时候,获取图片的分辨率信息是必不可少的.Python提供了许多库可以方便地获取图片的分 ...

  3. python获取当前时间戳_如何在Python中获取当前时间戳?

    在Python中可以使用来自模块time.datetime或calendar的函数来获取当前时间戳,代码语句如[import time;ts = time.time() print(ts)]. 在Py ...

  4. python中获取文件大小_如何在Python中获取文件大小

    python中获取文件大小 We can get file size in Python using the os module. 我们可以使用os模块在Python中获取文件大小. Python中的 ...

  5. 如何在Python中获取字符串的子字符串?

    有没有一种方法可以在Python中为字符串加上字符串,以从第三个字符到字符串的末尾获取新的字符串? 也许像myString[2:end] ? 如果离开第二部分意味着"直到最后",而 ...

  6. python 获取当前目录_如何在Python中获取当前的工作目录?

    python 获取当前目录 To get the current working directory in Python, there is a library function getcwd() i ...

  7. 如何在python中获取浮点数的十六进制值?

    浮点数的十六进制值 (Hexadecimal value of a float number) To get the hexadecimal value of a float number we us ...

  8. python输出当前时间戳_如何在Python中获取当前时间戳?

    在Python中,有多种方法可以获得当前时间戳.如果希望在Python中获得时间戳,可以使用来自模块time.datetime或calendar的函数. 使用模块time 模块time是提供各种与时间 ...

  9. python获取星期几_如何在Python中获取日期的星期几?

    回答(15) 2 years ago 使用 weekday() (docs): >>> import datetime >>> datetime.datetime. ...

最新文章

  1. spring cloud中通过配置文件自定义Ribbon负载均衡策略
  2. Linux下history命令详解---转载
  3. 成功解决ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any(
  4. Virtaulbox虚拟机添加磁盘
  5. LeetCode 2022春季赛 1. 宝石补给
  6. JedisConnectionException: java.Net.SocketTimeoutException: Read timed
  7. oracle rollup分组没有数据时为0_Hive 入门数据分析基础 5
  8. 【Python】字符串的格式化
  9. C语言分支语句和循环语句及练习
  10. UITableViewDataSource Protocol Reference
  11. Codeforces 679A Bear and Prime 100
  12. 根据stc89原理图画pcb_STC89C51单片机对AD模数转换学习板的控制原理解析
  13. java继承有哪些_Java中的继承类型有哪些
  14. 天朝的单行道+csuoj+spfa算法求最短路
  15. 谷歌广告投放,谷歌广告怎么投放?
  16. CSS3实现渐变背景动画特效
  17. 年轻一代程序员:社牛、不卷、玩开源
  18. 【思维导图】巩固你的JavaScript知识体系
  19. Outlook邮箱无法登录
  20. 【元胞自动机】基于元胞自动机模拟商场人流量matlab代码

热门文章

  1. JAVA 8:Lambdas表达式初体验
  2. 《穷爸爸,富爸爸》读书笔记
  3. Apache查看并发及TIME_WAIT过多的解决
  4. pthread库进行多线程编程 - 组件工厂 - C++博客
  5. Redhat AS4上中文乱码问题解决方案
  6. 高效配置Linux代理服务器――Squid
  7. 基本算法——康托展开与逆康托展开
  8. 【BZOJ3328】PYXFIB 数论+矩阵乘法
  9. 开启html元素的编辑模式contenteditable=true
  10. undefined与null