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.


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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.