Error de pepinillo de Python: UnicodeDecodeError

93

Estoy tratando de hacer una clasificación de texto usando Textblob. Primero estoy entrenando el modelo y serializándolo usando pickle como se muestra a continuación.

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()

Y cuando intento ejecutar este archivo:

import pickle
f = open('sample_classifier.pickle', encoding="utf8")
cl = pickle.load(f)    
f.close()

Me sale este error:

UnicodeDecodeError: el códec 'utf-8' no puede decodificar el byte 0x80 en la posición 0: byte de inicio no válido

A continuación se muestra el contenido de mi sample.csv:

Mi SQL no funciona correctamente en absoluto. Esta fue una elección incorrecta, SQL

Tengo problemas. Responda de inmediato, soporte

¿Dónde voy mal aquí? Por favor ayuda.

90abismo
fuente

Respuestas:

152

Al elegir openel modo de archivo wb, está eligiendo escribir en binario sin formato. No se aplica ninguna codificación de caracteres.

Por lo tanto, para leer este archivo, simplemente debe estar openen modo rb.

donkopotamus
fuente
¿Hay alguna razón para usar wbal guardar el pepinillo? ¿O hay un modo que se pueda usar para guardar el pepinillo que no requiera abrirlo con el rbmodo?
tsando
1
@tsando lo uso wbporque un problema que aún tengo que solucionar me impide usar wcon pickle. Se queja de escribir bytes en lugar de cadenas.
Gigaflop
Gracias ... me salvaste el día
Kumar KS
27

Creo que deberías abrir el archivo como

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

No debería tener que decodificarlo. pickle.loadle dará una copia exacta de lo que haya guardado. En este punto, debería poder trabajar con él clcomo si lo acabara de crear.

Saulspatz
fuente