【问题标题】:Stopping .toml files from corrupting at power outage (python)停止 .toml 文件在断电时损坏(python)
【发布时间】:2021-07-22 05:41:47
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我们是在讨论文件末尾的四个字母“null”还是字节 0?如果是前者,那么你的写作方式肯定有些古怪。即使是后者,操作系统也应该负责提交写入,那么你在什么操作系统上运行这一切?您有执行此操作的代码的最小示例吗?
  • 整个文件被替换为“null”,我在 Windows 10 上运行它。写作:f = open("file.toml") f.write("text", "w") f.关闭()
  • 如果经常断电,请保留多个文件备份。或者购买备用电源。

标签: python toml


【解决方案1】:

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

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

【讨论】:

  • 听起来很有趣,以后试试看?
猜你喜欢
  • 1970-01-01
  • 2014-01-29
  • 2018-08-20
  • 2011-10-04
  • 1970-01-01
  • 2010-11-08
  • 2019-05-10
  • 2019-12-12
  • 2012-05-02
相关资源
最近更新 更多