像file("foo.txt")
这样打开的文件是否有关于文件修改时间的任何信息?
基本上我想知道文件是否在某段时间后被修改或替换,但如果在检查修改时间和打开文件之间替换文件,那么您的信息就不准确了。
我怎么能确定?
感谢。
更新
@rubayeet:谢谢你的答案(+1),我实际上并没有想到这一点。但是......如果修改时间改变了该怎么办?也许我重新加载文件。但如果它改变了那个时候怎么办?如果定期触摸文件,我可能会永远陷入循环!我真正想要的是一种方法来获得一个打开的文件句柄和一个修改时间,没有潜在的无限循环。
PS你给出的答案实际上足够好用于我的目的,因为文件不会定期更改,现在我对它的一般兴趣。
更新2
考虑到之前的更新(并进行了一些实验)我意识到,仅仅知道文件被打开时的文件修改时间并没有太大的用处,就好像文件被修改,而阅读时你可以拥有部分或全部您读入的内容中已修改的数据,因此您必须打开并读取/处理整个文件,然后再次检查mtime(根据@ rubayeet的答案),看看您是否有过时的数据。
答案 0 :(得分:2)
对于简单模态,您可以使用:
from os.path import getmtime
modtime = getmtime('/file/to/path')
如果你想要类似回调功能的东西,你可以检查python的inotify绑定:pyinotify。
您必须设置一个watchmanager,如果受监控目录中发生任何更改,它会在事件循环中通知您。您注册特定事件,例如打开文件(如果写入则更改modtime)。
如果您对文件的独占访问感兴趣,我会指向fnctl module,它在filedescriptors上有一些低级和文件锁定机制。
答案 1 :(得分:1)
import os
filepath = '/path/to/file'
modifytime1 = os.path.getmtime(filepath)
fp = open(filepath)
modifytime2 = os.path.getmtime(filepath)
if modifytime1 != modifytime2:
print "File modified after opening"