10

寻找有关跨程序会话保存复杂 Python 数据结构的最佳技术的建议。

以下是我迄今为止提出的技术列表:

  • 泡菜/泡菜
  • json
  • jsonpickle
  • xml
  • 数据库(如 SQLite)

Pickle 是最简单和最快的技术,但我的理解是,不能保证 pickle 输出将适用于各种版本的 Python 2.x/3.x 或 Python 的 32 位和 64 位实现。

Json 仅适用于简单的数据结构。Jsonpickle 似乎纠正了这一点,并且似乎被编写为可以跨不同版本的 Python 工作。

序列化为 XML 或数据库是可能的,但需要额外的努力,因为我们必须自己手动进行序列化。

谢谢你,马尔科姆

4

4 回答 4

15

你对泡菜有一个误解:它们保证可以跨 Python 版本工作。您只需选择一个您关心的所有 Python 版本都支持的协议版本。

您遗漏的技术是 marshal,不能保证跨 Python 版本工作(顺便说一句,是 .pyc 文件的编写方式)。

于 2010-01-05T01:59:19.733 回答
3

您省略了marshalshelve模块。

这个python 文档页面也涵盖了持久性

于 2010-01-05T02:01:34.987 回答
2

你看过PySyckpyYAML吗?

于 2010-01-05T02:03:03.673 回答
2

你的“最佳”标准是什么?

  • pickle可以做大多数 Python 结构,也可以做深度嵌套的结构
  • sqlite dbs 可以很容易地查询(如果你知道 sql :)
  • 速度/内存?不要相信你没有伪造自己的基准。

(细则:
cPickle.dump(protocol=-1) 压缩,在一种情况下 15M pickle / 60M sqlite,但可能会中断。
多次出现的字符串,例如国家名称,可能会占用比您预期更多的内存;请参阅内置实习生()。
)

于 2010-02-01T13:22:03.113 回答