一千萬個為什麽

搜索

我如何首先讀取二進制pickle數據,然後取消它?

我正在取消在磁盤上大小約為1GB的NetworkX對象。雖然我以二進制格式保存它(使用協議2),但是要花費很長時間來取消這個文件 - 至少半小時。我運行的系統有足夠的系統內存(128 GB),所以這不是瓶頸。

我已經閱讀了這裏,首先將整個文件讀入內存,然後加快酸洗速度,然後unpickling it(特定的線程指的是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

有任何想法嗎?

最佳答案

pickle.load(file) expects a file-like object. Instead, use:

pickle.loads(string)

從字符串中讀取pickle對象層次結構。超過pickle對象表示的字符串中的字符將被忽略。

轉載註明原文: 我如何首先讀取二進制pickle數據,然後取消它?