Lỗi kén Python: UnicodeDecodeError


93

Tôi đang cố gắng thực hiện một số phân loại văn bản bằng Textblob. Đầu tiên tôi đang đào tạo mô hình và tuần tự hóa nó bằng cách sử dụng pickle như hình dưới đây.

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

Và khi tôi cố gắng chạy tệp này:

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

Tôi gặp lỗi này:

UnicodeDecodeError: codec 'utf-8' không thể giải mã byte 0x80 ở vị trí 0: byte bắt đầu không hợp lệ

Sau đây là nội dung của sample.csv của tôi:

SQL của tôi không hoạt động chính xác chút nào. Đây là một lựa chọn sai lầm, SQL

Tôi có vấn đề. Vui lòng phản hồi ngay lập tức, Hỗ trợ

Tôi sai ở đâu đây? Xin vui lòng giúp đỡ.


Câu trả lời:


153

Bằng cách chọn opentệp ở chế độ wb, bạn đang chọn ghi ở dạng nhị phân thô. Không có mã hóa ký tự nào được áp dụng.

Vì vậy, để đọc tệp này, bạn chỉ cần openở chế độ rb.


Có một lý do để sử dụng wbkhi tiết kiệm dưa chua? hoặc có một chế độ nào đó mà người ta có thể sử dụng để lưu dưa chua mà không yêu cầu mở nó bằng rbchế độ không?
tsando

1
@tsando Tôi sử dụng wbvì một số vấn đề tôi chưa khắc phục ngăn cản tôi sử dụng wvới dưa chua. Nó phàn nàn về việc viết byte thay vì chuỗi.
Gigaflop

Cảm ơn bạn đã lưu ... ngày của tôi
Kumar KS

27

Tôi nghĩ bạn nên mở tệp dưới dạng

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

Bạn không cần phải giải mã nó. pickle.loadsẽ cung cấp cho bạn một bản sao chính xác của bất cứ thứ gì bạn đã lưu. Tại thời điểm này, bạn sẽ có thể làm việc clnhư thể bạn vừa tạo ra nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.