我正在取消磁盘上大小约1GB的NetworkX对象。虽然我以二进制格式保存它(使用协议2),但需要很长时间来取消这个文件 - 至少半小时。我运行的系统有足够的系统内存(128 GB),所以这不是瓶颈。
我已经读过here,可以通过首先将整个文件读入内存,然后取消它来解决这个问题(特定的线程指的是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
有什么想法吗?
答案 0 :(得分:4)
pickle.load(file)
需要一个类似文件的对象。相反,使用:
从字符串中读取pickle对象层次结构。超过pickle对象表示的字符串中的字符将被忽略。
答案 1 :(得分:1)
文档提到StringIO,我认为这是一种可能的解决方案。
尝试:
f = open("big_networkx_graph.pickle","rb")
bin_data = f.read()
sio = StringIO(bin_data)
graph_data = pickle.load(sio)