我使用的实现算法非常复杂,分为三个部分。因此,我使用pickle在各个阶段之间转储所有内容,以便对每个阶段进行单独测试。
虽然第一个转储总是正常工作的,但第二个转储表现出大小依赖性。它适用于较小的数据集,但不适用于稍大的数据集。(我尝试创建的热力图也是同样的问题)转储文件约为10MB,所以并不是很大。
导致问题的转储包含整个类,该类又包含方法、字典、列表和变量。
我实际上尝试了从类内部和外部进行转储,但两者都失败了。 我使用的代码如下:
手头的错误是:
虽然第一个转储总是正常工作的,但第二个转储表现出大小依赖性。它适用于较小的数据集,但不适用于稍大的数据集。(我尝试创建的热力图也是同样的问题)转储文件约为10MB,所以并不是很大。
导致问题的转储包含整个类,该类又包含方法、字典、列表和变量。
我实际上尝试了从类内部和外部进行转储,但两者都失败了。 我使用的代码如下:
data = pickle.load(open("./data/tmp/data.pck", 'rb')) #Reads from the previous stage dump and works fine.
dataEvol = data.evol_detect(prevTimeslots, xLablNum) #Export the class to dataEvol
dataEvolPck = open("./data/tmp/dataEvol.pck", "wb") #open works fine
pickle.dump(dataEvol, dataEvolPck, protocol = 2) #dump works fine
dataEvolPck.close()
甚至尝试过这个:
dataPck = open("./data/tmp/dataFull.pck", "wb")
pickle.dump(self, dataPck, protocol=2) #self here is the dataEvol in the previous part of code
dataPck.close()
当我尝试使用以下部分加载类时,出现了问题:
dataEvol = pickle.load(open("./data/tmp/dataEvol.pck", 'rb'))
手头的错误是:
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
dataEvol = pickle.load(open("./data/tmp/dataEvol.pck", 'rb'))
ValueError: itemsize cannot be zero
有什么想法吗? 我正在使用64位Win-7计算机上的Python 3.3。如果我漏掉了任何必要的内容,请原谅,因为这是我的第一个问题。
答案: