我可以从一个打开供读取的文件中获取文件修改时间吗(python)

1 投票
2 回答
1134 浏览
提问于 2025-04-17 09:44

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

我主要想知道,自从某个时间点以来,这个文件是否被修改或替换过。但是,如果在我检查修改时间和打开文件之间,文件被替换了,那我得到的信息就不准确了。

我该怎么确保呢?

谢谢。

更新

@rubayeet:谢谢你的回答(+1),我其实没有想到这一点。不过……如果修改时间发生了变化,我该怎么办?也许我可以重新加载文件。但是如果那时候又发生了变化呢?如果文件经常被修改,我可能会陷入一个无限循环!我真正想要的是一种方法,可以获取一个打开的文件句柄和对应的修改时间,而不必担心会陷入无限循环。

附注:你给的答案其实已经足够满足我的需求,因为这个文件不会经常被修改,现在我只是出于好奇。

更新 2

经过对之前更新的思考(并进行了一些实验),我意识到,仅仅知道文件在打开时的修改时间并没有太大用处,因为如果在读取文件时文件被修改了,你可能会在读取的内容中包含一些或全部的修改数据。所以你必须打开并读取/处理整个文件,然后再检查一次修改时间(根据 @rubayeet 的回答),以确定你是否可能有过时的数据。

2 个回答

2

对于简单的修改时间,你可以使用:

from os.path import getmtime

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

如果你想要类似回调功能的东西,可以看看Python的inotify绑定:pyinotify

基本上,你需要设置一个监视管理器,它会在你监控的目录发生任何变化时,通过事件循环通知你。你可以注册特定的事件,比如打开一个文件(如果文件被写入,这会改变它的修改时间)。

如果你对文件的独占访问感兴趣,我建议你查看一下fnctl模块,这个模块提供了一些低级的文件锁定机制,可以用在文件描述符上。

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"

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答