停止 .toml 文件在停电时损坏 (python)

问题描述

我有一个 Python 小程序,可以从网站获取数据并将其保存到 toml 文件中。 使用 toml 以便我可以轻松访问字符串。 有一次,我在运行脚本时关闭了电源,当我重新打开计算机时,文件中充满了 nullnullnullnull

我想找到一种方法来阻止这种情况发生。 我想过使用重命名的临时文件,但我不知道它是否适用于 toml。我也考虑过使用数据库,但我只在 HTML/PHP 中使用 sql。 因此,如果您有任何想法,请告诉我。

更新: 我尝试使用 atomicwrites pyhon 库(查看 nrdxp 的答案)并且效果很好。

而不是使用: f = open("file","w") 我正在使用 with atomic_write("file",overwrite=True)as f: 并且它按我想要的方式工作。我通过使用任务管理器结束程序并拔下测试计算机的插头来测试它。 结果:没有错误

解决方法

您需要使更新 toml 文件成为 atomic operation。一个简单的方法(至少在 *nix 系统上)是写入一个临时文件,然后在所有写入完成后重命名该文件。

如果您需要更跨平台的方法,还有 atomicwrites python 库。