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

Python 将多个对象转储到同一文件中,python,numpy,scipy,pickle,Python,Numpy,Scipy,Pickle,假设我有一个大约100k对字符串的字典,和一个形状的numpy矩阵(100k,500)。我想把它们保存到同一个文件的磁盘上 我现在正在做的是使用cPickle转储字典,使用scipy.io.savemat转储矩阵。这样,卸载/加载速度非常快。但问题是,由于我使用了不同的方法,我得到了2个文件,我希望只有一个文件包含我的2个对象。我该怎么做 我可以在同一个文件中对它们进行cPickle,但是cPickle在大型阵列上的速度非常慢。您可以使用dilldill.dump访问并使用numpy中的dump

假设我有一个大约100k对字符串的字典,和一个形状的numpy矩阵(100k,500)。我想把它们保存到同一个文件的磁盘上

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


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

您可以使用
dill
dill.dump
访问并使用
numpy
中的
dump
方法来存储
数组
矩阵
对象,因此它的存储方式与直接从
numpy
对象上的方法进行存储的方式相同。你只要把字典翻一下就行了

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

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


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

您尝试过使用更高级的pickle协议吗?Python2.7的默认协议0将所有内容转换为ASCII,而协议1和2生成二进制输出(请确保以二进制模式打开输出文件,即
'wb'
而不是
'w'
)。是序列化数组和Python对象的异构集合的另一种非常快速的方法。它将每个变量保存到zip归档文件中的一个文件中(可能会被压缩)。您可以将一堆小的非numpy对象打包到字典或列表中,这些对象将与pickle一起保存<代码>加载是惰性的。