发生错误时关闭文件而不保存 - Python

时间:2017-05-17 22:02:22

标签: python python-3.x

我有一种情况,我使用'with'打开文件。我对文件进行了一些编辑,如果更改成功则保存。但是,无论何时在文件处理期间发生错误,我都希望文件关闭而不对文件进行任何更改。 with似乎覆盖了文件并使文件为空。

以下是代码:

with open(path + "\\Config\\"+ filename, 'wb') as configfile:
     config.write(configfile)

我得到“上述代码需要一个类似字节的对象,而不是'str'”错误,这很好。但是,发生错误时,已删除文件中的所有内容。

如何明确说明代码不保存更改并恢复到更改之前存在的内容?

我使用的是活动的python 3.5

2 个答案:

答案 0 :(得分:2)

如果您不想对原始文件进行任何更改,除非一切都成功,您应该做的是将输出写入新文件。然后,当您完成后,将该文件重命名为原始文件。

如果发生错误,您可以使用try/except来捕获错误并在退出前删除临时文件。

答案 1 :(得分:1)

以与w不同的模式打开。如果它不存在,将创建使用'w',否则它将截断文件中的任何内容。请改用'a',默认情况下截断。但请注意,文件光标将位于文件的末尾。如果没有错误,您实际上想要覆盖,您必须手动f.seek(0)然后f.truncate()

修改

实际上,最好使用r+,它也不会自动截断,并且流位于文件的开头而不是结尾(就像'a'一样),所以只需要一个简单的f.truncate()。查看您的选项here。基本上,你绝对不想要'w',而是'r+''a'中的任何一个,具体取决于你想要的行为。