1

打开的文件是否file("foo.txt")有关于文件修改时间的任何信息?

基本上我想知道文件是否在某个时间后被修改或替换,但如果文件在检查修改时间和打开文件之间被替换,那么你的信息不准确。

我怎么能确定?

谢谢。

更新

@rubayeet:感谢您的回答(+1),我实际上没有想到这一点。但是……修改时间变了怎么办?也许我再次重新加载文件。但是,如果它改变了那个时间呢?如果文件被定期触摸,我可能会永远陷入循环!我真正想要的是一种获得打开文件句柄和修改时间的方法,而没有潜在的无限循环。

PS您给出的答案实际上对我的目的来说已经足够好了,因为文件不会定期更改,现在我对此很感兴趣。

更新 2

考虑到之前的更新(并进行了一些实验),我意识到仅仅知道文件打开时的文件修改时间并没有多大用处,就像在读取文件时修改了文件一样,您可以拥有部分或全部修改后的数据在您读入的内容中,因此您必须打开并读取/处理整个文件,然后再次检查 mtime (根据@rubayeet 的回答),看看您是否有过时的数据。

4

2 回答 2

2

对于简单的 modtime,您可以使用:

from os.path import getmtime

modtime = getmtime('/file/to/path')

如果您想要类似回调功能的东西,您可以检查 python 的 inotify 绑定:pyinotify

您必须设置一个监视管理器,如果受监视目录中发生任何更改,它会在事件循环中通知您。您注册特定事件,例如打开文件(如果写入会更改 modtime)。

如果您对文件的独占访问感兴趣,我会指向fnctl 模块,它在文件描述符上有一些低级和文件锁定机制。

于 2012-01-07T11:36:06.123 回答
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"
于 2012-01-07T11:40:43.720 回答