ข้อผิดพลาด Python pickle: UnicodeDecodeError


93

ฉันกำลังพยายามจัดประเภทข้อความโดยใช้ Textblob ฉันกำลังฝึกโมเดลเป็นครั้งแรกและจัดลำดับโดยใช้ของดองดังที่แสดงด้านล่าง

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' ไม่สามารถถอดรหัสไบต์ 0x80 ในตำแหน่ง 0: ไบต์เริ่มต้นไม่ถูกต้อง

ต่อไปนี้เป็นเนื้อหาของ sample.csv ของฉัน:

SQL ของฉันทำงานไม่ถูกต้องเลย นี่เป็นตัวเลือกที่ผิด SQL

ฉันมีปัญหา กรุณาตอบกลับทันทีสนับสนุน

นี่ฉันผิดตรงไหน กรุณาช่วย.


คำตอบ:


153

เมื่อเลือกopenไฟล์ในโหมดwbคุณกำลังเลือกที่จะเขียนในไบนารีดิบ ไม่มีการใช้การเข้ารหัสอักขระ

ดังนั้นการอ่านไฟล์นี้คุณควรเพียงแค่ในโหมดopenrb


มีเหตุผลที่จะใช้ในwbการบันทึกของดองหรือไม่? หรือมีโหมดหนึ่งที่สามารถใช้เพื่อบันทึกของดองซึ่งไม่จำเป็นต้องเปิดด้วยrbโหมด?
tsando

1
@tsando ฉันใช้wbเพราะปัญหาบางอย่างที่ฉันยังไม่ได้แก้ไขทำให้ฉันไม่สามารถใช้wกับของดองได้ มันบ่นเกี่ยวกับการเขียนไบต์แทนสตริง
Gigaflop

ขอบคุณ ... คุณช่วยชีวิตฉันไว้
Kumar 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.