【发布时间】:2011-10-19 03:03:29
【问题描述】:
我正在用 Python 编写一个脚本,它将吐出一些组织为字典列表的数据:
[{'name': 'first_thing', 'color': 'blue', 'flavour': 'watermelon' },
{'name': 'second_thing', 'color': 'red' },
{'name': 'third_thing', 'color': 'blue', 'size': 'huge!' }]
我正在尝试决定一种将这些数据存储在文件中的方法。我的考虑:
- 我希望它易于阅读和编写,因此我可以将数据加载回脚本并进一步操作。
- 我希望它是一种非 python 特定的格式。也许以后我会想在 PHP 或其他东西中使用这些数据,谁知道呢?
- 我希望它是一种易于附加更多数据的格式。如果我的文件有一个包含 1000 个小 dict 项的列表,我不想将所有 1000 个项加载到内存中,只是为了在末尾再添加一个项。
我的第一次尝试是使用 Pickle,它符合简单的标准,但它依赖于 Python,我必须取消腌制、附加,然后重新腌制。
我认为其他似乎可行的格式(但我反对):
- JSON(可能会很烦人)
- 搁置(特定于 python)
- CSV(类似于胶带,不那么优雅,但它可能会起作用)
- 类似 sqlite 之类的轻量级数据库(这里可能太花哨了)
有人对这些或其他格式有任何论据吗?
【问题讨论】:
-
你看过 XML 吗?您可以创建自己的模式并将其用作使用您输出的数据的所有程序的标准。虽然 XML 很大,但它非常适合跨语言/平台的东西。
-
我没有考虑过 XML。这当然是一种跨平台的格式。有没有办法像 pickle.dump() 一样简单地编写它?
-
我从未尝试过在 python 中编写 XML,但它肯定应该有一两个库,但是它不会像 pickle 那样简单,而且可能比 CSV 更繁琐一些,尝试wiki.python.org/moin/PythonXml 以获得良好的开端。
-
刚刚想起这个问题...多年后,有了更多经验,我可能会建议自己使用jsonl(jsonlines.org)。