如何先读取二进制泡菜数据,然后解开数据?

con*_*lee 2 python serialization pickle

我要解开磁盘上大小约为1GB的NetworkX对象。尽管我以二进制格式(使用协议2)保存了该文件,但释放该文件花费的时间很长-至少半小时。我正在运行的系统具有足够的系统内存(128 GB),所以这不是瓶颈。

我在这里已经读到,可以通过首先将整个文件读入内存,然后取消对其进行腌制来加快腌制速度(该特定线程指的是python 3.0,我没有使用它,但是这一点在python 2.6中应该仍然是正确的)。

我如何首先读取二进制文件,然后解除修补程序?我试过了:

import cPickle as pickle
f = open("big_networkx_graph.pickle","rb")
bin_data = f.read()
graph_data = pickle.load(bin_data)
Run Code Online (Sandbox Code Playgroud)

但这返回:

TypeError: argument must have 'read' and 'readline' attributes
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

gim*_*mel 5

pickle.load(file)需要一个类似文件的对象。而是使用:

pickle.loads(string)

从字符串读取腌制的对象层次结构。腌制对象表示形式之后的字符串中的字符将被忽略。