我遇到的问题是在路径上使用os.stat的一部分(例如,以C:\ myfile1.txt为例)。当我在这个文件上运行os.stat并在结果列表中取第9个元素时,我得到了一些数字形式的修改时间(例如1348167977)。
注意:我不确定如何计算这些数字。
当我创建C:\ myfile1.txt时,它有一些数字,如上例所示。如果我创建另一个文件C:\ myfile2.txt,它会得到一个代表修改时间的新数字,该数字高于C:\ myfile1.txt(这就像我期望的那样)。我还有第三个文件C:\ myfile3.txt,它是最后创建的。
如果我复制C:\ myfile2.txt并用生成的复制文件覆盖C:\ myfile3.txt,则会出现问题,新的C:\ myfile3.txt上的os.stat显示的修改时间小于C:\ myfile1.txt。为什么会这样? C:\ myfile3.txt的修改时间应该是最高或者至少等于C:\ myfile2.txt。
感谢您的回答,我希望我能够解释得很清楚。
编辑:
这里有一些示例代码来测试我描述的内容。有时,如果你在不同的时间重新运行它,它们的工作时间有时会完全相同。我想我只是不完全理解我输出的MTIME。
import os
import shutil
import time
myfile1 = open("C:\\myfile1.txt", 'wt')
myfile1.close()
time.sleep(10)
myfile2 = open("C:\\myfile2.txt", 'wt')
myfile2.close()
time.sleep(10)
myfile2 = open("C:\\myfile3.txt", 'wt')
myfile2.close()
shutil.copyfile("C:\\myfile2.txt", "C:\\myfile3.txt")
modified_time_first = (os.stat("C:\\myfile1.txt")[9])
modified_time_second = (os.stat("C:\\myfile2.txt")[9])
modified_time_third = (os.stat("C:\\myfile3.txt")[9])
print "The first files modified time is: "
print modified_time_first
print ""
print "The second files modified time is: "
print modified_time_second
print ""
print "The third files modified time is: "
print modified_time_third
print ""
答案 0 :(得分:5)
您看到的数字是UNIX timestamp,表示自1970年1月1日以来的秒数。您可以使用datetime.datetime.fromtimestamp()
将其转换为python datetime对象,例如:
>>> import datetime
>>> datetime.datetime.fromtimestamp(1348167977)
datetime.datetime(2012, 9, 20, 21, 6, 17)
注意os.stat()
返回一个命名元组;您也可以按名称访问该元组的属性:
>>> import os
>>> os.stat('test.txt').st_mtime
1348169795.0
请参阅os.stat()
documentation了解所有可用的属性。
另一方面,您访问了st_ctime
值; python元组和列表索引从0开始,因此第9个元素是索引8.您访问索引10,即文件的创建时间。
如果您需要的只是文件的修改时间,您还可以使用os.path.getmtime()
作为方便的快捷方式:
>>> os.path.getmtime('test.txt')
1348169795.0
>>> datetime.datetime.fromtimestamp(os.path.getmtime('test.txt'))
datetime.datetime(2012, 9, 20, 21, 36, 35)
复制文件时,通常会包含最后修改时间戳等属性,因此新复制文件的修改时间可以轻松地向后和向前更改。这同样适用于创建时间。
答案 1 :(得分:0)
此外,该字符串似乎采用“纪元时间”格式。我用ipython:
import os
import time
time.ctime(os.stat('index.php')[9])
==>'Fri Jun 15 23:05:07 2012'
我使用Mac OS X,所以我做了man stat
。看来stat
返回的第9个项目是“ctime”。 “ctime”,在* nix世界中指的是inode数据修改信息。您可能可以测试是否应该修改此字段以执行您正在执行的操作。您可以手动执行此操作,并对生成的文件运行stat
以确认是否应更改此文件。您可能会选择os.stat
的错误部分。