Помилка засолу Python: UnicodeDecodeError


93

Я намагаюся зробити класифікацію тексту за допомогою Textblob. Я спочатку навчаю модель і серіалізую її за допомогою засолу, як показано нижче.

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

У мене проблеми. Будь ласка, негайно дайте відповідь, підтримка

Де я тут помиляюся? Будь ласка, допоможіть.


Відповіді:


153

Вибираючи openфайл у режимі wb, ви обираєте писати в необробленому двійковому файлі . Не застосовується кодування символів.

Таким чином, щоб прочитати цей файл, ви повинні просто openв режимі rb.


Чи є підстави використовувати wbпри збереженні соління? або є режим, який можна використовувати для збереження соління, який не потребував би відкриття його в rbрежимі?
цандо

1
@tsando я використовую, wbоскільки якась проблема, яку я ще не вирішив, заважає мені використовувати wмариновані огірки. Він скаржиться на написання байтів замість рядків.
Гігафлоп

Дякую ... ти врятував мій день
Кумар К.С.

27

Я думаю, вам слід відкрити файл як

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.