Python-Pickle-Fehler: UnicodeDecodeError


89

Ich versuche, eine Textklassifizierung mit Textblob durchzuführen. Ich trainiere zuerst das Modell und serialisiere es mit Pickle, wie unten gezeigt.

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

Und wenn ich versuche, diese Datei auszuführen:

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

Ich erhalte diesen Fehler:

UnicodeDecodeError: Der Codec 'utf-8' kann das Byte 0x80 an Position 0 nicht dekodieren: Ungültiges Startbyte

Folgendes ist der Inhalt meiner sample.csv:

Mein SQL funktioniert überhaupt nicht richtig. Dies war eine falsche Wahl, SQL

Ich habe Probleme. Bitte antworten Sie sofort, Support

Wo gehe ich hier falsch? Bitte helfen Sie.


Antworten:


144

Wenn Sie opendie Datei im Modus wbauswählen, schreiben Sie in rohe Binärdatei. Es wird keine Zeichenkodierung angewendet.

Um diese Datei zu lesen, sollten Sie einfach openim Modus sein rb.


Gibt es einen Grund für die wbAufbewahrung der Gurke? oder gibt es einen Modus, in dem man die Gurke speichern kann, ohne sie im rbModus öffnen zu müssen ?
Tsando

1
@tsando Ich verwende, wbweil ein Problem, das ich noch nicht behoben habe, mich daran hindert, es wmit Pickle zu verwenden. Es beschwert sich über das Schreiben von Bytes anstelle von Strings.
Gigaflop

Danke ... du hast meinen Tag gerettet
Kumar KS

27

Ich denke, Sie sollten die Datei als öffnen

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

Sie sollten es nicht entschlüsseln müssen. pickle.loadSie erhalten eine genaue Kopie von allem, was Sie gespeichert haben. An diesem Punkt sollten Sie in der Lage sein, so zu arbeiten, clals hätten Sie es gerade erstellt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.