2013-05-31 52 views
3

我目前正在將數據從無限while循環寫入覆盆子pi上的SD卡。從無限while循環保存到文本文件

file = open("file.txt", "w") 
while True: 
    file.write(DATA) 

似乎有時file.txt並不總是保存,如果程序沒有通過命令或鍵盤中斷關閉。是否有定期的方式來保存並確保數據正在保存?我正在考慮使用

open("file.txt", "a") 

要追加到文件並定期關閉txt文件並再次打開它。是否有更好的方式來安全地存儲數據,同時通過無限循環運行?

+0

你可以嘗試看看是否緩衝選項設置爲0有什麼差別?它可以作爲第三個參數傳遞,'fileTest = open(「file.txt」,「a」,0)'。請不要使用內置名稱文件來做東西。使用另一個變量名稱。 –

+2

file.flush()將確保寫入數據。但是你真的應該抓住這個例外並且正確地關閉你的文件。 –

+0

這並不是一個例外,它會阻止程序。當我想停止捕獲數據並將數據移到其他地方時,我需要停止該程序,這就是數據未保存的地方。我會嘗試刷新並看看會發生什麼。 –

回答

9

文件的write()方法不一定會將數據寫入磁盤。你必須調用flush()方法來確保這種情況發生......

file = open("file.txt", "w") 
while True: 
    file.write(DATA) 
    flle.flush() 

不要擔心參考os.fsync() - 操作系統會假裝數據已寫入磁盤,即使它實際上沒有。

+0

該死!我總是低估蟒蛇。我寫了一個定期寫入磁盤的函數,現在我發現python會自動執行它... – Prinsig

0

關閉文件並再次將代碼寫入文件。 並嘗試選擇+模式

1

如果您正在退出程序異常,那麼你應該期望有時文件將不會正確關閉。

在每次寫入後打開和關閉文件都不會這樣做,因爲在打開文件時仍然有可能中斷程序。

退出程序的等效方法是CTRL-C低級別。這就像是「現在出去吧,有一場火災,除了你自己」,這個計劃就會懸而未決。

如果你想幹淨靠近你的文件,然後把中斷語句放在你的代碼中。這樣你可以優雅地處理關閉。

1

使用with語句 - 它會確保文件自動關閉!

with open("file.txt", "w") as myFile: 
    myFile.write(DATA) 

從本質上講,with語句會在這種情況下,這樣做是這樣的:

try: 
    myFile = open("file.txt", "w") 
    do_stuff() 

finally: 
    myFile.close() 

確保您該文件將被關閉,並寫入到文件中的信息將被保存。有關with語句

更多信息可以在這裏找到:PEP 343