python对象保存和重新加载

Posted

技术标签:

【中文标题】python对象保存和重新加载【英文标题】:python object save and reload 【发布时间】:2012-08-17 05:39:14 【问题描述】:

我一直在研究一个 python 程序,它基本上创建了 5 种不同类型的对象,这些对象处于层次结构中。例如,我的程序可能会创建 1 个 Region 对象,其中包含 2000 个 Column 对象,其中包含 8000 个 Cell 对象(每列中有 4 个 Cell),其中所有对象都基于视频输入相互交互。

现在,我希望能够在视频输入在一段时间内更改其每个状态后保存所有对象状态。所以我的问题是如何有效地保存和重新加载 Python 中的数千个对象?提前致谢!

【问题讨论】:

高效还是快速? 【参考方案1】:

不确定泡菜对于大规模生产的效率如何,但我认为您正在寻找的是object serialization。但是您是在尝试“刷新”这些对象中的信息还是保存并加载它们?另请阅读“Persistence of External Objects”部分,因为您需要为关系/关联创建与每个对象关联的字母数字 ID。

一种完全 hacky 的方法也可以是对对象进行 json 化并存储。您仍然需要字母数字 id 或某种可用的标识符来关联每个对象。

【讨论】:

还有 @IgnacioVazquez-Abrams 在另一个 SO 线程中提到的 shelve:***.com/a/12000115/1431750【参考方案2】:

您看过 Shelve、Pickle 还是 cPickle? http://docs.python.org/release/2.5/lib/persistence.html

【讨论】:

【参考方案3】:

我认为您需要查看ZODB。

ZODB 是一个对象数据库,它使用 pickle 来序列化数据,非常擅长处理对象的层次结构,如果您的对象使用包含的 persistent.Persistent 基类,将检测并仅保存在您更改时更改的对象犯罪;例如没有必要在每一个微小的变化上写出整个层次结构。

ZODB 项目中包含一个名为BTrees 的包,它支持 ZODB 并可以高效地将数千个对象存储在一个地方。将这些用于您的区域对象来存储列。我们有时使用 BTree 来存储数百万个数据点。

【讨论】:

以上是关于python对象保存和重新加载的主要内容,如果未能解决你的问题,请参考以下文章

在 Matlab 中从磁盘加载保存的对象很慢

场景重新加载后不保存对象名称

为啥在保存对象后使用“重新加载”方法? (Hartl Rails Tut 6.30)

需要保存 NSmutableArray 的 PathDrawingInfo 对象,以便在重新加载应用程序时使用

如何在pygame中保存/加载游戏功能?

是否可以将 File 对象保存在 LocalStorage 中,然后当用户返回页面时通过 FileReader 重新加载文件?