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

7

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

我自己熟悉jsonpickle,也听说过pytables。可能还有其他模块。而且,每个模块似乎都适用于特定目的,并具有自己的限制(例如,使用pickle加载大型列表或字典需要花费很长时间,如果工作的话)。因此,拥有一个正确的概述是很好的。

那么,您能帮助提供一个综合的模块列表,用于保存和加载数据,为每个模块描述:

  • 模块的一般目的,
  • 其限制,
  • 为什么您会选择这个模块而不是其他模块?
2个回答

7

marshal

  • 优点:

    • 可以以二进制格式读写Python值,因此比基于字符的pickle快得多。
  • 缺点:

    • 不支持所有Python对象类型。一些不支持的类型,如内置类的子类,将显示为正确的编组和反编组
    • 未经意或恶意构造的数据可能不安全。
    • 如果需要,Python维护者保留修改后向不兼容的方式进行编组格式的权利。

shelve

  • 优点:

    • 架构中的值可以是任意Python对象。
  • 缺点:

    • 不支持对架构对象的并发读/写访问

ZODB(由@Duncan建议)

  • 优点:

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

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

添加到 marshal cons 中:“如果需要,Python 维护者保留以向后不兼容的方式修改 marshal 格式的权利”。 - Janne Karila
1
你可以将 ZODB (http://www.zodb.org/documentation/tutorial.html) 添加为第三个选项。优点:透明持久化、完全事务支持、可插拔存储、可扩展的架构。缺点:不是标准库的一部分。 - Duncan
1
@Duncan 已添加,谢谢。顺便说一下,你的声望已经足够高了,可以编辑这篇帖子,这不是 SO 鼓励的吗 :) - qiao
感谢迄今为止的答案。鼓励集体回答,这似乎适合这个问题。另外,请随时就有关Json等方面的优缺点发表您的意见,这对于比较来说会更好。 - neydroydrec

4

这里有一个标准库数据持久化模块的 概述


2
这根本不是一个答案,也不是OP所要求的!请参考http://stackoverflow.com/faq#deletion - Don Question
@DonQuestion,有一个很好的资源可以了解标准库中数据持久性模块的优缺点,为什么要重复写文档中已经写过的内容呢? - Gandaro
回答问题之前,您必须先阅读它。OP 暗示他已经研究了一些持久化解决方案,并且知道它们的弱点。他不是要求提供标准 Python 持久化模块的链接,而是要求推荐一些有教养的解决方案,并说明我们为什么会建议这些方案以及它们的优缺点和主要用例。我在您的回答中没有看到这一点,也没有在提供的链接中看到。如果您按照我的建议链接,您会意识到您的回答是不够的。请始终记住,其他未来的用户可能会有类似的问题。 - Don Question

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接