2011-06-13 4 views
13

이 오류가 발생하며 의미가 무엇인지 알 수 없습니다. 이 문제를 어떻게 해결할 수 있습니까?Python에서 피클 링 오류가 발생 했습니까?

내 코드는 다음과 같습니다

, 내가 전에 사용했습니다 그것은 일했다 :

File "/home/md202/pmid_editor.py", line 18, in <module> 
     dict2 = pickle.load(in1) 
    File "/usr/lib/python2.5/pickle.py", line 1370, in load 
     return Unpickler(file).load() 
    File "/usr/lib/python2.5/pickle.py", line 858, in load 
     dispatch[key](self) 
KeyError: '\x00' 
+2

전체 tacebacks 제발 ....이 자신의 코드입니까? 재현하는 방법? –

+0

무엇 당신은 unpickling입니까? 정의한 클래스의 인스턴스 인 경우 클래스를 가져 왔습니까? –

+0

나는 파일에 절인 사전을 언 피클링하고있다. – marsx

답변

-1

어쩌면 다른 프로토콜이 pickle.load(in1, 2)을 시도하려고한다 :

parentdir = os.getcwd() 
dirlist = os.listdir(parentdir) 

for dir in dirlist: 
    if not dir == "pubs_edits": continue 
    if os.path.isdir(os.path.join(parentdir, dir)): 
         os.chdir(os.path.join(parentdir, dir)) 
         file_list = os.listdir(os.path.join(parentdir, dir)) 
         for f in file_list: 
          in1 = open(f, 'r') 
          dict2 = pickle.load(in1) 

이 오류 메시지입니다!

+0

이것은 무엇을 의미합니까? – marsx

+0

모듈 문서 [link] (http://docs.python.org/library/pickle.html#data-stream-format)에서 load 함수는 데이터를 절편하는 방법을 정의하는 선택적 매개 변수를 사용합니다. – Chakib

+2

doc에 따르면 load()는 선택적 매개 변수를 사용하지 않고 dump 만 수행합니다. – a1an

0

내가 장고를 통해 데이터베이스에 저장 한 문자열 표현을 (pickle.loads 사용) unpickle하려고 할 때이 정확한 오류가 날 위해 발생

pickle.loads()

13

보십시오. 장고는 내 문자열의 문자 표현을 변경하여 pickle.loads(mystring)이 오류를 던졌다. 명시 적 문자열 변환을 추가 할 때 괜찮 았습니다. pickle.loads(str(mystring))

EDIT : 원래 게시물의 주석을 보면 이것이 언급 한 유니 코드 문자열 문제와 관련이 있다고 생각합니다. 데이터베이스에 정상적인 문자열을 넣고 django는이 오류를 생성하는 유니 코드 문자열을 돌려줍니다.

+0

당신의 대답은 제게 저의 문제를 도왔습니다. 나는 앱 엔진을 사용하고 db.Blob()를 사용해야했을 때 db.ext() 속성으로 절편 문자열을 저장했다. –

+0

Matt, 내가 지정한 정확한 오류가있다. 장고를 사용하여 db에 저장하려고했다. 개체를 unpickling하는 동안이 오류가 발생합니다. – Anto

+0

아마도이 오류는 Python 3+에서 발생하지 않을 것입니까? – Demis

3

비슷한 문제가 발생하여 KeyError: '\x1f'이 발생했습니다.

필자의 경우, gzip 파일 (예 : gzip.open(fileName,'wb'))로 옮겨져 일반 파일 객체 (예 : open(fileName,'rb'))로 읽으려는 경우.

+0

피클 링 된 파일은 gzip으로 재생하기가 까다 롭습니다. 내 피클 링 된 파일은 gzip ('file'에 따라)처럼 보였지만 gunzip을 시도 할 때 유용한 데이터가없는 파손 된 파일 (200M에서 10K로)을 반환했습니다 (pickle.load는 동일한 KeyError를 제공합니다. 압축 해제 된 파일에 '\ x00'문제가 발생했습니다. – a1an

+0

파일이 불완전하거나 손상된 것처럼 보입니다. 텍스트 형식으로 절인 경우'zcat myfile'을 볼 수 있습니다 - 이유가 있습니까? – drevicko

+0

아마도 손상된, 나는 그것을 재현 해봤는데로드 할 때 더 이상 오류가 발생하지 않았다. – a1an

-1

장고에서 데이터를 자동으로 채취하려고 할 때 같은 문제가 발생했습니다. 문제는 '.DS_Store'와 같은 숨겨진 비 -pkl 파일이있을 수 있다는 것입니다. 이런 경우 경우에 따라서, 당신은 그래서 당신은 단지 'PKL'파일을 가져로드하기 전에 정규식 필터를 추가하여이 문제를 처리 할 수 ​​있습니다 : 당신은 같은 읽어 그래서

import re 

for dir in dirlist: 
    if not dir == "pubs_edits": continue 
    if os.path.isdir(os.path.join(parentdir, dir)): 
     os.chdir(os.path.join(parentdir, dir)) 
     file_list = os.listdir(os.path.join(parentdir, dir)) 
     reg = re.compile(r'pkl') 
     for f in file_list: 
      if reg.search(f): 
       in1 = open(f, 'r') 
       dict2 = pickle.load(in1) 
0

피클이 바이너리입니다. 대신 ('r') ('rb') 읽기 바이너리를 사용해보십시오. 또한, 파일을 쓰는 것이 pickle 파일을 바이너리로 wrting하고 있는지 확인하십시오 ('wb'). 그렇게하면 도움이되기를 바랍니다.

+0

왜 당신이 downvoted인지 몰라, 이것은 내가 찾고 있던 대답이다. – user2677280

관련 문제