有哪些可用的Python模块可以保存和加载数据?

时间:2012-01-17 11:47:49

标签: python data-storage python-module data-persistence

StackOverflow上有许多分散的帖子,关于用于保存和加载数据的Python模块。

我自己熟悉jsonpickle,我也听说过pytables。那里可能还有更多。此外,每个模块似乎都符合某种目的,并且有其自身的限制(例如,如果正在工作,加载带有泡菜的大型列表或字典需要很长时间)。因此,对可能性进行适当的概述会很好。

然后,您可以帮助提供用于保存和加载数据的全面模块列表,描述每个模块:

  • 模块的一般用途是什么,
  • 其限制,
  • 为什么你会选择这个模块而不是其他模块?

2 个答案:

答案 0 :(得分:7)

marshal

  • 优点:

    • 可以以二进制格式读取和写入Python值。因此它比pickle(基于字符)快得多。
  • 缺点:

    • 并非所有Python对象类型都受支持。一些不受支持的类型(如内置类的子类)似乎可以正确编组和解组
    • 无意防止错误或恶意构建的数据。
    • Python维护者保留在需要时以反向不兼容的方式修改编组格式的权利

shelve

  • 优点:

    • 货架中的值可以是基本上任意的Python对象
  • 缺点:

    • 不支持对搁置对象的并发读/写访问

ZODB(由@Duncan建议)

  • 临:

    • 透明的持久性
    • 完整交易支持
    • 可插拔存储
    • 可扩展的架构
  • 缺点

    • 不属于标准库。
    • 无法(轻松)重新加载数据,除非用于持久化的原始python对象模型可用(考虑版本难度和数据可移植性)

答案 1 :(得分:4)

标准的lib数据持久性模块有overview个。