Kesalahan acar Python: UnicodeDecodeError

93

Saya mencoba melakukan klasifikasi teks menggunakan Textblob. Saya pertama kali melatih model dan membuat serial menggunakan acar seperti yang ditunjukkan di bawah ini.

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

Dan ketika saya mencoba menjalankan file ini:

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

Saya mendapatkan kesalahan ini:

UnicodeDecodeError: 'utf-8' codec tidak dapat mendekode byte 0x80 di posisi 0: byte awal tidak valid

Berikut adalah konten sample.csv saya:

SQL saya sama sekali tidak berfungsi dengan benar. Ini adalah pilihan yang salah, SQL

Saya punya masalah. Mohon balas segera, Dukungan

Di mana kesalahan saya di sini? Tolong bantu.

90abyss
sumber

Jawaban:

153

Dengan memilih ke openfile dalam mode wb, Anda memilih untuk menulis dalam biner mentah. Tidak ada pengkodean karakter yang diterapkan.

Jadi untuk membaca file ini, Anda cukup opendalam mode rb.

donkopotamus.dll
sumber
Apakah ada alasan untuk digunakan wbsaat menyimpan acar? atau adakah mode yang dapat digunakan untuk menyimpan acar yang tidak perlu dibuka dengan rbmode?
tsando
1
@tsando Saya gunakan wbkarena beberapa masalah yang belum saya perbaiki mencegah saya menggunakan wdengan acar. Ia mengeluh tentang menulis byte, bukan string.
Gigaflop
Terima kasih ... Anda menyelamatkan hari saya
Kumar KS
27

Saya pikir Anda harus membuka file sebagai

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

Anda tidak perlu memecahkan kode itu. pickle.loadakan memberi Anda salinan persis dari apa pun yang Anda simpan. Pada titik ini Anda, harus dapat bekerja dengan clseolah-olah Anda baru saja membuatnya.

saulspatz
sumber