假设您有一个用于处理某种 XML 文件或配置文件的库。该库将整个文件读取到内存中并提供编辑内容的方法。完成内容操作后,您可以调用 write
将内容保存回文件。问题是如何以安全的方式做到这一点。
覆盖现有文件(开始写入原始文件)显然是不安全的。如果 write
方法在完成之前失败,您最终会得到只写了一半的文件并且丢失了数据。
更好的选择是在某处写入临时文件,当write
方法完成时,您可以将临时文件复制到原始文件。
现在,如果复制因某种原因失败,您仍然可以在临时文件中正确保存数据。如果复制成功,您可以删除临时文件。
在 POSIX 系统上,我想您可以使用 rename
系统调用,这是一个原子操作。但如何在 Windows 系统上做到这一点最好呢?特别是,如何使用 Python 最好地处理这个问题?
此外,还有另一种安全写入文件的方案吗?
最佳答案
如果你看过 Python 的文档,它清楚地提到 os.rename() 是一个原子操作。因此,就您而言,将数据写入临时文件然后将其重命名为原始文件将非常安全。
另一种方法可以像这样工作:
- 设原始文件为abc.xml
- 创建 abc.xml.tmp 并向其中写入新数据
- 将 abc.xml 重命名为 abc.xml.bak
- 将 abc.xml.tmp 重命名为 abc.xml
- 正确放置新的 abc.xml 后,删除 abc.xml.bak
正如您所看到的,您拥有 abc.xml.bak,如果存在与 tmp 文件相关的任何问题,您可以使用它来恢复并将其复制回来。
关于python - 如何安全地写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22809312/