2011-05-08 5 views
3

Windows 사용자의 테스트 결과가 포함 된 데이터 구조가 포함 된 파일이 있습니다. 그는 pickle.dump 명령을 사용하여이 파일을 만들었습니다. 우분투, 나는 다음과 같은 프로그램이 테스트 결과를로드하려고 :pickle.load Not Working

import pickle 
import my_module 

f = open('results', 'r') 
print pickle.load(f) 
f.close() 

을하지만 어떤 모듈이 "my_module"라는하지 피클 모듈 내부 오류가 발생합니다.

파일의 손상으로 인해 문제가 발생하거나 미망인에서 Linux로 옮길 때 문제가 생길 수 있습니다.

+0

설치와 사용자의 Python 버전 및 패키지 구조가 동일합니까? –

+0

피클 구현은 플랫폼 독립적입니다. 파일을 바이너리 모드로 열고 새로운 결과를보고하십시오. –

답변

2

특히 다른 플랫폼에서 pickle을 사용하는 경우 pickled 파일을 이진 모드로 열어야합니다. 자세한 설명은 thisthis 질문을 참조하십시오.

4

문제는 피클의 개행 문자 처리 방식에 있습니다. 줄 바꿈 문자 중 일부는 덤프 /로드 된 데이터의 모듈 이름을 손상시킵니다.

파일을 이진 모드로 저장하고로드하는 것이 도움이 될 수 있지만 문제가 있습니다. 필자는 오랫동안 문서와 검색을 읽은 후 피클이 데이터 저장을위한 여러 가지 "프로토콜"을 처리하고 하위 호환성 때문에 가장 오래된 프로토콜 인 프로토콜 0 (원본 ASCII 프로토콜)을 사용한다는 사실을 발견했습니다. 사용할 수있는 가장 높은 프로토콜 (현재 2)

pickle.dump(someObj, open("dumpFile.dmp", 'wb'), protocol=pickle.HIGHEST_PROTOCOL) 
을 선택하여,

pickle.dump(someObj, open("dumpFile.dmp", 'wb'), protocol=2) 

나 :

사용자는 덤프 파일이 같은 데이터를 저장하는 동안 프로토콜 키워드를 명시 할에 의해 현대적인 프로토콜을 선택할 수 있습니다

프로토콜 버전은 덤프 파일에 저장되므로 Load() 함수가 자동으로 처리합니다.

감사합니다.