我试图加载我之前用cPickle腌制的两个大词典。这是我用来创建泡菜的代码:
f_out = open("file_1.pickle", 'wb')
cPickle.dump(obj_1, f_out, protocol=-1)
f_out.close()
f_out = open("file_2.pickle", 'wb')
cPickle.dump(obj_2, f_out, protocol=-1)
f_out.close()
f_out
不会在创建字典的脚本中的任何其他位置使用,并且脚本运行时没有错误。泡菜很大:obj_1
为895.9 MB,obj_2
为978.3 MB。文件已重命名,但不会以任何其他方式更改。以下代码用于加载pickles:
f1 = open("file_1_renamed.pickle", 'rb')
obj_1 = cPickle.load(f1)
f1.close()
f2 = open("file_2_renamed.pickle", 'rb')
obj_2 = cPickle.load(f2)
f2.close()
obj_1
加载没有问题,但尝试加载obj_2
会创建EOFError
。我在pickle.load()
时遇到了同样的错误,当我将文件作为文本打开时,也不是二进制文件。 Stack Overflow(Python Pickling Dictionary EOFError)的另一个问题表明,这可能与内存不足有关,但我并不完全相信 - 为什么内存问题会导致文件结束错误?我使用的是OS X 10.9.5和Python 2.7.8。