python - 如何安全地写入文件?

标签 python windows file

假设您有一个用于处理某种 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/

相关文章:

windows - Windows 中的 Erlang 和 YAWS 设置

eclipse - 文件消失,可能与 Eclipse 有关

windows - 使用powershell修改本地账户

python - 仅针对某些应用程序使用 winAPI BitBlt 捕获窗口时出现问题

c++ - 来自 cpp 文件的部分行最终出现在输出文件中 - 闹鬼代码?

python - 如何将日志消息从多处理模块路由到文件?

python - 值错误 : Cannot index with multidimensional key

python - 为什么这不起作用? CountVectorizer 中的停用词

python - 沿给定轴 1 将 numpy ndarray 与 3d 数组相加

python - PyCharm 远程调试