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.


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.


¿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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.