0

我遇到的问题是在路径上使用 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:\我的文件 1.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 ""
4

2 回答 2

5

您看到的数字是UNIX 时间戳,表示自 1970 年 1 月 1 日这一纪元以来的秒数。您可以使用datetime.datetime.fromtimestamp()将其转换为 python 日期时间对象,例如:

>>> 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()文档。

另一方面,您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)

复制文件时,通常会包含上次修改时间戳等属性,因此新复制文件的修改时间很容易改变,无论是向后还是向前。这同样适用于创建时间。

于 2012-09-20T19:40:57.217 回答
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. 看来返回的第 9 项stat是“ctime”。“ctime”,在*nix 世界中指的是inode 数据修改信息。您可能可以测试是否应该修改此字段以执行您正在执行的操作。您可能会手动执行此操作,并stat在生成的文件上运行以确认这是否应该更改。您可能选择了错误的部分os.stat

于 2012-09-20T19:59:41.003 回答