4

我正在解开磁盘上大约 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)

但这会返回:

TypeError: argument must have 'read' and 'readline' attributes

有任何想法吗?

4

2 回答 2

8

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

pickle.loads(string)

从字符串中读取腌制对象层次结构。字符串中经过腌制对象表示的字符将被忽略。

于 2010-05-04T09:51:20.430 回答
1

该文档提到StringIO,我认为这是一种可能的解决方案。

尝试:

f = open("big_networkx_graph.pickle","rb")
bin_data = f.read()
sio = StringIO(bin_data)
graph_data = pickle.load(sio)
于 2010-05-04T09:52:29.630 回答