Erreur de pickle Python: UnicodeDecodeError

93

J'essaye de faire une classification de texte en utilisant Textblob. Je commence par entraîner le modèle et je le sérialise à l'aide de pickle comme indiqué ci-dessous.

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

Et quand j'essaye d'exécuter ce fichier:

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

J'obtiens cette erreur:

UnicodeDecodeError: le codec 'utf-8' ne peut pas décoder l'octet 0x80 en position 0: octet de départ invalide

Voici le contenu de mon sample.csv:

Mon SQL ne fonctionne pas du tout correctement. C'était un mauvais choix, SQL

J'ai des problèmes. Veuillez répondre immédiatement, Support

Où vais-je mal ici? Veuillez aider.

90 abîme
la source
Double
Boris

Réponses:

152

En choisissant openle fichier en mode wb, vous choisissez d'écrire en binaire brut. Aucun encodage de caractères n'est appliqué.

Ainsi pour lire ce fichier, vous devez simplement openen mode rb.

donkopotame
la source
Y a-t-il une raison à utiliser wblors de la sauvegarde du cornichon? ou y a-t-il un mode que l'on peut utiliser pour enregistrer le cornichon qui ne nécessiterait pas de l'ouvrir avec le rbmode?
tsando
1
@tsando J'utilise wbparce qu'un problème que je n'ai pas encore résolu m'empêche de l'utiliser wavec pickle. Il se plaint d'écrire des octets au lieu de chaînes.
Gigaflop
Merci ... vous avez sauvé ma journée
Kumar KS
27

Je pense que vous devriez ouvrir le fichier comme

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

Vous ne devriez pas avoir à le décoder. pickle.loadvous donnera une copie exacte de tout ce que vous avez enregistré. À ce stade, vous devriez pouvoir travailler avec clcomme si vous venez de le créer.

saulspatz
la source