Pythonピクルスエラー:UnicodeDecodeError


93

Textblobを使用してテキスト分類を実行しようとしています。私は最初にモデルをトレーニングし、以下に示すようにpickleを使用してシリアル化します。

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'コーデックは位置0のバイト0x80をデコードできません:無効な開始バイト

以下は私のsample.csvの内容です:

SQLがまったく正しく機能していません。これは間違った選択でした、SQL

問題があります。すぐに返信してください、サポート

ここでどこが間違っているのですか?助けてください。


回答:


152

を選択することによって openモードwbでファイルを、生のバイナリで書き込むています。適用されている文字エンコードはありません。

したがって、このファイルを読み取るには、単にopenモードにする必要がありますrb


wb漬物を保存するときに使用する理由はありますか?または、モードでピクルスを開く必要がないピクルスを保存するために使用できるモードはありrbますか?
tsando 2018年

1
@tsandowbまだ修正していない問題があるためw、pickleで使用できません。文字列の代わりにバイトを書くことについて文句を言います。
ギガフロップ

おかげで...あなたは私の一日保存
クマールKS

27

私はあなたがとしてファイルを開くべきだと思います

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

デコードする必要はありません。 pickle.load保存したものの正確なコピーが提供されます。この時点で、cl作成したばかりのように操作できるはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.