将多个对象转储到同一个文件中
dumping several objects into the same file
假设我有一个包含大约 100k 对字符串的字典,以及一个形状为 (100k, 500) 的 numpy 矩阵。我想将它们保存到磁盘中的同一个文件中。
我现在正在做的是使用 cPickle 转储字典,并 scipy.io.savemat 转储矩阵。这样,转储/加载非常快。但问题是,由于我使用不同的方法,我获得了 2 个文件,而我希望只有一个文件包含我的 2 个对象。我该怎么做?
我可以在同一个文件中对它们进行 cPickle,但是 cPickle 在大数组上的速度非常慢。
您可以使用 dill
。 dill.dump
访问并使用 numpy
中的 dump
方法来存储 array
或 matrix
对象,因此它的存储方式与您执行此操作时的方式相同直接从 numpy
对象上的方法。你只需 dill.dump
字典。
dill
也有能力以压缩格式存储泡菜,但速度较慢。正如评论中提到的,还有 joblib
,它也可以和 dill
做同样的事情……但基本上,joblib
利用 cloudpickle
(这是另一个序列化器)或者也可以使用 dill
,进行序列化。
如果你有一个巨大的字典,并且不需要一次需要所有内容......也许更好的选择是 klepto
,它可以使用高级序列化方法(来自 dill
)将 dict
存储到磁盘(或数据库)上的多个文件,其中您在内存中有一个代理 dict
,使您只能获取所需的条目。
所有这些包都为您提供了一个快速统一的 dump
标准 python 和 numpy
对象。
假设我有一个包含大约 100k 对字符串的字典,以及一个形状为 (100k, 500) 的 numpy 矩阵。我想将它们保存到磁盘中的同一个文件中。
我现在正在做的是使用 cPickle 转储字典,并 scipy.io.savemat 转储矩阵。这样,转储/加载非常快。但问题是,由于我使用不同的方法,我获得了 2 个文件,而我希望只有一个文件包含我的 2 个对象。我该怎么做?
我可以在同一个文件中对它们进行 cPickle,但是 cPickle 在大数组上的速度非常慢。
您可以使用 dill
。 dill.dump
访问并使用 numpy
中的 dump
方法来存储 array
或 matrix
对象,因此它的存储方式与您执行此操作时的方式相同直接从 numpy
对象上的方法。你只需 dill.dump
字典。
dill
也有能力以压缩格式存储泡菜,但速度较慢。正如评论中提到的,还有 joblib
,它也可以和 dill
做同样的事情……但基本上,joblib
利用 cloudpickle
(这是另一个序列化器)或者也可以使用 dill
,进行序列化。
如果你有一个巨大的字典,并且不需要一次需要所有内容......也许更好的选择是 klepto
,它可以使用高级序列化方法(来自 dill
)将 dict
存储到磁盘(或数据库)上的多个文件,其中您在内存中有一个代理 dict
,使您只能获取所需的条目。
所有这些包都为您提供了一个快速统一的 dump
标准 python 和 numpy
对象。