在崩溃后不丢失数据的情况下写入文件

2024-09-30 20:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个在循环开始之前打开的文件,我几乎在循环的每次迭代中都在写入该文件。然后在循环结束后关闭文件。例如,类似于:

testfile = open('datagathered','w')
for i in range(n):
    ...
    testfile.write(line)

testfile.close()
  • 我遇到的问题是,万一程序崩溃或者我想让它崩溃,已经写入testfile的内容将被删除,而文本文件{}将为空。我明白这是因为我只在循环之后才关闭文件,但是如果我在每次写入(即循环中)之后关闭并打开文件,这难道不会导致令人难以置信的速度减慢吗?

  • 如果是的话,我有什么其他的方法来写,并确保在崩溃的情况下,已经写的行不会丢失,以一种有效的方式?

  • 链接的帖子确实提出了很好的建议,可以说可以回答这个问题,但它们没有涵盖所涉及的风险和效率差异。更确切地说:使用buffersize有什么风险吗?e、 g.testfile = open('datagathered','w',0)如果有多个文件要写入,那么使用with open...仍然是一个可行的替代方案?

  • 小提示:这是在一个非常长的运行环境中提出的,在这种情况下,文件将被写入2-3天。因此,有一个快速和安全的写作方式在这里绝对是有价值的。


Tags: 文件in程序内容forclose方式line
2条回答

使用上下文:

with open('datagathered','w') as f:
    f.write(data)

从这个问题我明白了你所说的异常可能发生在运行时和SIGINT。在

你可以用“除了最后一次尝试”来达到你的目标。它使您能够捕获异常和SIGINT信号。由于finally块将被执行,要么捕捉到异常,要么一切正常,所以关闭文件是最好的选择。我想下面的示例代码可以解决您的问题。在

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()

相关问题 更多 >