Python 将多个对象转储到同一文件中
假设我有一个大约100k对字符串的字典,和一个形状的numpy矩阵(100k,500)。我想把它们保存到同一个文件的磁盘上 我现在正在做的是使用cPickle转储字典,使用scipy.io.savemat转储矩阵。这样,卸载/加载速度非常快。但问题是,由于我使用了不同的方法,我得到了2个文件,我希望只有一个文件包含我的2个对象。我该怎么做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
我可以在同一个文件中对它们进行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一起保存<代码>加载是惰性的。