将多个对象转储到同一个文件中

dumping several objects into the same file

假设我有一个包含大约 100k 对字符串的字典,以及一个形状为 (100k, 500) 的 numpy 矩阵。我想将它们保存到磁盘中的同一个文件中。

我现在正在做的是使用 cPickle 转储字典,并 scipy.io.savemat 转储矩阵。这样,转储/加载非常快。但问题是,由于我使用不同的方法,我获得了 2 个文件,而我希望只有一个文件包含我的 2 个对象。我该怎么做?

我可以在同一个文件中对它们进行 cPickle,但是 cPickle 在大数组上的速度非常慢。

您可以使用 dilldill.dump 访问并使用 numpy 中的 dump 方法来存储 arraymatrix 对象,因此它的存储方式与您执行此操作时的方式相同直接从 numpy 对象上的方法。你只需 dill.dump 字典。

dill 也有能力以压缩格式存储泡菜,但速度较慢。正如评论中提到的,还有 joblib,它也可以和 dill 做同样的事情……但基本上,joblib 利用 cloudpickle(这是另一个序列化器)或者也可以使用 dill,进行序列化。

如果你有一个巨大的字典,并且不需要一次需要所有内容......也许更好的选择是 klepto,它可以使用高级序列化方法(来自 dill)将 dict 存储到磁盘(或数据库)上的多个文件,其中您在内存中有一个代理 dict,使您只能获取所需的条目。

所有这些包都为您提供了一个快速统一的 dump 标准 python 和 numpy 对象。