我有一个在循环开始之前打开的文件,几乎在循环的每次迭代中我都在写入该文件。然后我在循环结束后关闭文件。所以例如像这样的东西:
testfile = open('datagathered','w')
for i in range(n):
...
testfile.write(line)
testfile.close()
我遇到的问题是,如果程序崩溃或我想崩溃,已经写入
testfile
的内容将被删除,文本文件datagathered
将为空。我知道发生这种情况是因为我只在循环后关闭文件,但是如果我在每次写入后(即在循环中)关闭并打开文件,这不会导致难以置信的减速吗?如果是,我有什么替代方案来进行写作,并确保在发生崩溃时,已经写好的行不会以有效的方式丢失?
链接的帖子确实提出了可以回答这个问题的好建议,但它们没有涵盖所涉及的风险和效率差异。更准确地说:使用缓冲区大小是否有任何风险?例如
testfile = open('datagathered','w',0)
最后,如果要写入多个文件,使用with open...
仍然是一个可行的替代方案吗?小提示:这是在非常长的运行环境下提出的,文件将被写入 2-3 天。因此,拥有一种快速、安全的写作方式在这里绝对有值(value)。
最佳答案
从问题中我了解到您在谈论异常可能发生在运行时和 SIGINT。
您可以使用“try-except-finally” block 来实现您的目标。它使您能够捕获异常和 SIGINT 信号。由于 finally block 将被执行,要么捕获到异常,要么一切顺利,关闭文件是最好的选择。我猜下面的示例代码可以解决您的问题。
testfile = open('datagathered','w')
try:
for i in range(n):
...
testfile.write(line)
except KeyboardInterrupt:
print "Interrupt from keyboard"
except:
print "Other exception"
finally:
testfile.close()
关于python - 崩溃后写入文件而不会丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36716982/