我正在尝试将一些结果写入pickle文件,如下所示:
raw_X = (self.token_ques(text) for text in training_data)
with open('/root/Desktop/classifier_result.pkl', 'wb') as handle:
pickle.dump(raw_X, handle)
错误:
raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle generator objects
任何帮助都会非常明显。
答案 0 :(得分:5)
当你想要腌制数据时,不要使用生成器表达式。改为使用列表推导,或者在生成器上调用list()
来捕获所有生成的元素以进行酸洗。
例如,以下工作正常:
raw_X = [self.token_ques(text) for text in training_data]
with open('/root/Desktop/classifier_result.pkl', 'wb') as handle:
pickle.dump(raw_X, handle)
同样如下:
raw_X = (self.token_ques(text) for text in training_data)
with open('/root/Desktop/classifier_result.pkl', 'wb') as handle:
pickle.dump(list(raw_X), handle)
答案 1 :(得分:4)
raw_X = (self.token_ques(text) for text in training_data)
这是一台发电机。正如错误所说,我们不能腌制发电机。请改用它。
raw_X=[]
for text in data:
raw_X.append(self.token_ques(text))
raw_X=tuple(raw_X)
然后腌制raw_X
。
修改强>
这对我有用
import pickle
raw_X=[]
data=[1,2,3,4,5,6,2,0]
for text in data:
raw_X.append(str(text))
print pickle.dumps(raw_X)
我正在使用str()
代替您的函数而dumps()
代替dump()
。