2017-11-25 103 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

相關問題