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

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.