2013-05-31 53 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