2017-11-25 140 views
1

所以我有一个python脚本(我们称之为file_1.py)用新内容覆盖文本文件的内容,并且它工作得很好。我有另一个python脚本(file_2.py),它读取文件并对文件中的数据执行操作。 file_2.py我一直试图获取文本文件的编辑file_1.py,然后在添加新数据后尽快完成一些操作。我查看了subprocess module,但我无法弄清楚如何在不同的文件中使用它。这是我到目前为止有:

file_1.py:当一个文本文件被另一个程序编辑时获取

with open('text_file.txt','w') as f: 
    f.write(assemble(''.join(data))) # you can ignore what assemble does, this part already works. 

file_2.py:

while True: 
    f = open('text_file.txt','r') 
    data = f.read() 
    function(data) 
    f.close() 

我想,既然我关闭并重新打开该文件每次循环,文件中的数据将被更新。但是,看起来我错了,因为即使文件已更新,数据仍保持不变。

那么我该怎么做呢?

回答

1

你是否总是在第一个文件中篡改数据,使用相同的数据? 我的意思是,不是随着时间的推移追加或实际改变数据?

我看到它在这里工作时,我改变

with open('text_file.txt','wt') as f: 

with open('text_file.txt','at') as f: 

,我追加了一些数据。 'w'将会覆盖,如果数据没有改变,你会一遍又一遍地看到相同的数据。

编辑:

(如评论OP自答案讨论)另一种可能性是写入文件后使用f.flush()的需要。尽管缓冲区在关闭文件时自动写入磁盘(或离开with模块),但这种写入可能需要一些时间,并且如果在该时刻之前再次读取文件,那么更新将不会在那里(尚)。更新后删除不确定性调用刷新,迫使磁盘写入。

如果您在读数之间有足够的时间睡眠阅读代码(即阅读足够慢),则可能不需要手动冲洗。但如果有疑问,或者以简单的方式并确保使用,请使用flush()

+0

我每次都完全覆盖文件。 100%的新数据。 –

0

好吧,看起来我已经解决了我的问题。根据this website,它说:

Python关闭它们时自动刷新文件。但是在关闭任何文件之前,您可能需要刷新数据。

由于“自动冲洗”的事情没有工作,我试图手动冲洗使用file.flush() I/O,它的工作。我每次都将这个函数写入file_1.py的文件中。

编辑:似乎当time.sleep()被称为之间的文件读取,它会干扰,你必须手动刷新缓冲区。

+0

很高兴你解决了它。实际上,我添加了一个'flush()',但它在没有'flush'的情况下也能正常工作,所以我不用立刻说使用flush()。那是因为我使用了睡眠(0.2),以便能够看到在我眼前滚动的文件内容。这导致我认为,也许你的阅读速度太快了,你看不到变化(立即)。它发生的答案是简单的...但我仍然建议使用睡眠。为什么要以如此高的速度读取文件? – progmatico

+0

实际上,在函数调用中,我在我的循环中调用了'time.sleep()',所以也许这跟它有关系。 –

+0

发生的情况是,如果您手动关闭文件,或者通过留下块来更新将被写入,但可能需要一段时间才能发生。这就是为什么我碰巧在没有刷新的情况下成功读取了udates。因为在再次阅读之前我花了大量的时间睡眠(),而不是写作生效所需的时间。通过使用flush(),您可以在此刻强制文件缓冲区写入磁盘,从而消除不确定性。 – progmatico

相关问题