【问题标题】:Python pickle error: UnicodeDecodeErrorPython泡菜错误: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

我有问题。请立即回复,支持

我哪里错了?请帮忙。

【问题讨论】:

标签: python pickle textblob


【解决方案1】:

通过在wb 模式下选择open 文件,您选择使用原始二进制文件进行写入。没有应用字符编码。

因此要读取此文件,您只需在模式rbopen

【讨论】:

  • 保存泡菜时是否有理由使用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 个月。
        猜你喜欢
        • 2017-05-06
        • 2018-09-09
        • 1970-01-01
        • 2017-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多