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

7 投票
2 回答
782 浏览
提问于 2025-04-17 10:25

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

我自己比较熟悉jsonpickle,也听说过pytables。可能还有更多的模块。每个模块似乎都有自己的用途和局限性(比如,用pickle加载一个很大的列表或字典可能会非常慢,甚至根本无法完成)。所以,能有一个清晰的模块概览会很不错。

你能帮忙提供一个全面的模块列表,用于保存和加载数据吗?每个模块可以描述一下:

  • 这个模块的主要用途是什么,
  • 它的局限性,
  • 为什么你会选择这个模块而不是其他的?

2 个回答

4

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

7

marshal:

  • 优点:

    • 可以以二进制格式读写Python的值。这比pickle(基于字符的)要快得多。
  • 缺点:

    • 并不是所有的Python对象类型都支持。有些不支持的类型,比如内置类型的子类,看起来在marshal和unmarshal时是正确的。
    • 不打算对错误或恶意构造的数据提供安全保障。
    • Python的维护者保留在必要时以不向后兼容的方式修改marshal格式的权利。

shelve

  • 优点:

    • 在shelf中可以存储几乎任何Python对象。
  • 缺点:

    • 不支持同时读写shelved对象。

ZODB(由@Duncan推荐)

  • 优点:

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

    • 不是标准库的一部分。
    • 除非原始的Python对象模型可用,否则很难重新加载数据(考虑版本问题和数据可移植性)。

撰写回答