복붙노트

[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. ==============================

    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. ==============================

    2.encoding = 'latin1'을 사용하면 객체에 numpy 배열이 포함되어있을 때 몇 가지 문제가 발생합니다.

    encoding = 'latin1'을 사용하면 객체에 numpy 배열이 포함되어있을 때 몇 가지 문제가 발생합니다.

    encoding = bytes를 사용하면 더 좋습니다.

    encoding = bytes 사용에 대한 자세한 설명은이 대답을 참조하십시오.

  3. from https://stackoverflow.com/questions/28218466/unpickling-a-python-2-object-with-python-3 by cc-by-sa and MIT license