Python泡菜错误:UnicodeDecodeError
Posted
技术标签:
【中文标题】Python泡菜错误:UnicodeDecodeError【英文标题】:Python pickle error: UnicodeDecodeError 【发布时间】:2016-01-02 15:31:59 【问题描述】:我正在尝试使用 Textblob 进行一些文本分类。我首先训练模型并使用 pickle 对其进行序列化,如下所示。
import pickle
from textblob.classifiers import NaiveBayesClassifier
with open('sample.csv', 'r') as fp:
cl = NaiveBayesClassifier(fp, format="csv")
f = open('sample_classifier.pickle', 'wb')
pickle.dump(cl, f)
f.close()
当我尝试运行这个文件时:
import pickle
f = open('sample_classifier.pickle', encoding="utf8")
cl = pickle.load(f)
f.close()
我收到此错误:
UnicodeDecodeError: 'utf-8' 编解码器无法解码位置 0x80 字节 0:无效的起始字节
以下是我的 sample.csv 的内容:
我的 SQL 根本无法正常工作。这是一个错误的选择,SQL
我有问题。请立即回复,支持
我哪里错了?请帮忙。
【问题讨论】:
Using pickle.dump - TypeError: must be str, not bytes的可能重复 【参考方案1】:通过在wb
模式下选择open
文件,您选择使用原始二进制文件进行写入。没有应用字符编码。
因此要读取此文件,您只需在模式rb
下open
。
【讨论】:
保存泡菜时是否有理由使用wb
?或者有没有一种可以用来保存泡菜的模式,不需要用rb
模式打开它?
@tsando 我使用wb
,因为我还没有解决的一些问题阻止我将w
与泡菜一起使用。它抱怨写字节而不是字符串。【参考方案2】:
我认为你应该打开文件
f = open('sample_classifier.pickle', 'rb')
cl = pickle.load(f)
您不必对其进行解码。 pickle.load
将为您提供您保存的任何内容的精确副本。此时,您应该能够使用cl
,就像您刚刚创建它一样。
【讨论】:
【参考方案3】:也许该文件是使用 latin1 编码的:
f = open('sample_classifier.pickle', encoding="latin1")
【讨论】:
【参考方案4】:因为建议的答案都没有帮助我解决错误 - 我已经改用 joblib:
import joblib
clf_loaded = joblib.load('classifier_file_name.joblib')
效果很好!
【讨论】:
【参考方案5】:试试这个代码它的工作原理:
with open('your picle file name', 'rb') as f:
classifier = pickle.load(f, encoding="latin1")
注意:如果不固定,如果你使用python2,你可以尝试将(编码)类型更改为(“utf-8”),但如果你使用python3.x,编码将是默认的(“utf-8”)... .
【讨论】:
这个问题的公认答案已经表明并解释了 'rb' fs 选项的使用。设置编码可能对处理遗留系统的人很有用,但值得注意的是,py2 不仅已被弃用,而且在回答时已停用约 18 个月。以上是关于Python泡菜错误:UnicodeDecodeError的主要内容,如果未能解决你的问题,请参考以下文章
泡菜模块出错。 AttributeError:类没有属性“__new__”