8

我目前正在将无限循环中的数据写入树莓派上的 SD 卡。

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

如果程序没有通过命令或键盘中断关闭,有时 file.txt 似乎并不总是保存。是否有定期保存和确保数据保存的方法?我正在考虑使用

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

附加到文件并定期关闭 txt 文件并再次打开它。在无限循环中运行时,是否有更好的方法来安全地存储数据?

4

4 回答 4

14

文件的write()方法不一定将数据写入磁盘。您必须调用该flush()方法以确保发生这种情况......

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

不要担心引用os.fsync()- 操作系统会假装数据已写入磁盘,即使它实际上没有。

于 2013-05-31T19:04:08.320 回答
2

使用 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

于 2013-05-31T19:12:25.517 回答
1

如果您异常退出程序,那么您应该预料到有时文件不会正确关闭。

每次写入后打开和关闭文件都不会这样做,因为在文件打开时您仍然有可能中断程序。

相当于CTRL-C退出程序的方法是低级的。就像,“现在出去,着火了,救自己”,然后程序就挂了。

如果您想要干净地关闭您的文件,请将中断语句放入您的代码中。这样你就可以优雅地处理关闭。

于 2013-05-31T18:51:29.960 回答
0

关闭文件并再次将代码写入文件。并尝试选择 a+ 模式

于 2013-05-31T18:49:40.450 回答