[PYTHON] 파이썬 2 개체를 파이썬 3으로 풀어주기
PYTHON파이썬 2 개체를 파이썬 3으로 풀어주기
Python 3.4와 함께 Python 2.4에서 절인 객체를로드하는 방법이 있는지 궁금합니다.
나는 최신 정보를 얻기 위해 많은 회사 레거시 코드에서 2to3을 실행했습니다.
이 작업을 수행하면 파일을 실행할 때 다음과 같은 오류가 발생합니다.
File "H:\fixers - 3.4\addressfixer - 3.4\trunk\lib\address\address_generic.py"
, line 382, in read_ref_files
d = pickle.load(open(mshelffile, 'rb'))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 1: ordinal
not in range(128)
논쟁에서 피클 링 된 객체를 볼 때, 그것은 str 타입의 키와 값을 담고있는 dict의 dict이다.
그래서 내 질문은 : 원래 Python 3.4, 파이썬 2.4 절임 된 개체를로드 할 수있는 방법이 있나요?
해결법
-
==============================
1.pickle.load () 함수는 파이썬이 파이썬 문자열을 파이썬 3 문자열로 변환하는 방법을 알려주거나 pickle을 바이트로 남겨 두도록 지시 할 수 있습니다.
pickle.load () 함수는 파이썬이 파이썬 문자열을 파이썬 3 문자열로 변환하는 방법을 알려주거나 pickle을 바이트로 남겨 두도록 지시 할 수 있습니다.
기본값은 모든 문자열 데이터를 ASCII로 시도하고 디코딩하는 것이 실패하는 것입니다. pickle.load () 문서를 참조하십시오 :
인코딩을 latin1로 설정하면 데이터를 직접 가져올 수 있습니다.
with open(mshelffile, 'rb') as f: d = pickle.load(f, encoding='latin1')
잘못된 코덱을 사용하여 문자열을 디코딩하지 않았는지 확인해야합니다. Latin-1은 바이트 값 0-255를 처음 256 유니 코드 코드 포인트에 직접 매핑하므로 모든 입력에 사용할 수 있습니다.
대안은 encoding = 'bytes'로 데이터를로드하고 나중에 모든 바이트 키와 값을 디코딩하는 것입니다.
-
==============================
2.encoding = 'latin1'을 사용하면 객체에 numpy 배열이 포함되어있을 때 몇 가지 문제가 발생합니다.
encoding = 'latin1'을 사용하면 객체에 numpy 배열이 포함되어있을 때 몇 가지 문제가 발생합니다.
encoding = bytes를 사용하면 더 좋습니다.
encoding = bytes 사용에 대한 자세한 설명은이 대답을 참조하십시오.
from https://stackoverflow.com/questions/28218466/unpickling-a-python-2-object-with-python-3 by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 코드에서 nltk 데이터 디렉토리를 설정하는 방법은 무엇입니까? (0) | 2018.10.04 |
---|---|
[PYTHON] Subprocess.Popen에서 "source"명령 호출 (0) | 2018.10.04 |
[PYTHON] 파이썬에서 float의 이진 표현 (16 진수가 아닌 비트) (0) | 2018.10.04 |
[PYTHON] 파이썬 : 바인딩 소켓 : "이미 사용중인 주소" (0) | 2018.10.04 |
[PYTHON] __str__ 및 __repr__의 목적은 무엇입니까? (0) | 2018.10.04 |