【问题标题】:saving multiple dicts and variables in disk [closed]在磁盘中保存多个字典和变量[关闭]
【发布时间】:2016-04-22 04:56:22
【问题描述】:

我的代码通常会运行几天,并以 Python 字典和浮点变量的形式输出中间结果。我不能在运行后一次性将所有中间值附加到 Python 列表并使用 pickle 等将所有输出保存到物理文件中。这是因为,如果出现中断,我可能会丢失迄今为止收集的所有数据。

所以我必须定期转储(并附加)多个字典和其他变量。做这个的最好方式是什么 ?我查看了 JSON(但不确定如何从单个文件中存储(并稍后读取)多个 JSON 对象。我可以将我的数据附加到 pickle 文件中吗?将这些数据保存在一个简单的文本文件或 csv 文件中将是我的最后一招。

【问题讨论】:

  • 您可以将泡菜附加到文件中,然后逐个读取它们,直到获得EOFError,例如code

标签: python json pickle


【解决方案1】:

使用json。这是一个很好的保护变体,具有编辑文件的能力:

import json

list_of_dict = [
    {'a': 1},
    {'b': 2}
]

with open('filename.json', 'w') as f:
    json.dump(list_of_dict, f, sort_keys=True, indent=4)

【讨论】:

  • 这意味着我将所有的 dicts 编译成一个列表,然后将其写入 JSON 文件,这是我无法承受的。是否可以将多个 JSON 对象连续追加到单个文件中,然后解析该文件以将所有 JSON 对象重新加载到 Python 列表中?
【解决方案2】:

这取决于您的要求

  1. 附加数据是否需要参考上一个

    • 如果是这样,并且您不能承受可能由于文件处理程序错误而导致的数据丢失,您可以考虑将数据保存在 sqlite 数据库中,python 自带
    • 如果没有,您可以简单地创建新的 json 文件,问题已解决,必要时合并它们
  2. 使用泡菜

    • 我确实在pickle文档中找到了一些StringIO,并且刚刚提到需要文件处理程序进行写入,不确定它是否支持'append',是否只是直接使用python文件处理程序追加或系统追加二进制数据/挑选的字符串>>

【讨论】:

    猜你喜欢
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 2019-07-03
    • 2010-09-29
    • 1970-01-01
    相关资源
    最近更新 更多