我正在尝试加载我之前使用 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
没有在创建字典的脚本中的其他任何地方使用,并且脚本运行时没有错误。泡菜很大: 895.9 MBobj_1
和 978.3 MB obj_2
。这些文件已被重命名,但没有以任何其他方式更改。以下代码用于加载泡菜:
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。