TypeError:无法pickle生成器对象

nlp*_*per 12 python generator pickle

我正在尝试将一些结果写入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)
Run Code Online (Sandbox Code Playgroud)

错误:

    raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle generator objects
Run Code Online (Sandbox Code Playgroud)

任何帮助都会非常明显.

Mar*_*ers 5

当您想要pickle数据时,不要使用生成器表达式.改为使用列表推导,或者调用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)
Run Code Online (Sandbox Code Playgroud)

同样如下:

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)
Run Code Online (Sandbox Code Playgroud)


For*_*Bru 5

raw_X = (self.token_ques(text) for text in training_data)
Run Code Online (Sandbox Code Playgroud)

这是一个发电机。正如错误所示,我们无法 pickle 生成器。用这个代替。

raw_X=[]
for text in data:
  raw_X.append(self.token_ques(text))
raw_X=tuple(raw_X)
Run Code Online (Sandbox Code Playgroud)

然后腌制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)
Run Code Online (Sandbox Code Playgroud)

我正在使用str()而不是你的函数,而dumps()不是dump().