Ошибка рассола Python: UnicodeDecodeError

93

Я пытаюсь провести классификацию текста с помощью 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

У меня проблемы. Пожалуйста, ответьте немедленно, Поддержка

Где я здесь ошибаюсь? Пожалуйста помоги.

90абисс
источник

Ответы:

152

Выбирая openфайл в режиме wb, вы выбираете запись в необработанном двоичном формате. Кодировка символов не применяется.

Таким образом, чтобы прочитать этот файл, вы должны просто openв режиме rb.

донкопотам
источник
Есть ли повод использовать wbпри сохранении рассола? или есть режим, который можно использовать для сохранения рассола, который не требует его открытия с помощью rbрежима?
tsando 08
1
@tsando Я использую, wbпотому что некоторая проблема, которую я еще не исправил, мешает мне использовать wс pickle. Он жалуется на запись байтов вместо строк.
Gigaflop
Спасибо ... вы спасли мне день
Кумар К.С.
27

Я думаю, вам следует открыть файл как

f = open('sample_classifier.pickle', 'rb')
cl = pickle.load(f)   

Вам не нужно его декодировать. pickle.loadдаст вам точную копию того, что вы сохранили. На этом этапе вы должны иметь возможность работать с ним, clкак если бы вы только что создали его.

Saulspatz
источник