阻止 .toml 文件在断电时损坏 (python)
Stopping .toml files from corrupting at power outage (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 库。
我有一个 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 库。