复制文件时,在Python中使用os.stat的修改时间会降低

时间:2012-09-20 19:29:19

标签: python file stat copying

我遇到的问题是在路径上使用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 ""

2 个答案:

答案 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的错误部分。