2013-08-14 5 views
16

/에서 목록 unpickle I는 다음과 같습니다 목록이 있습니다파이썬 피클/파일

a = [['a string', [0, 0, 0], [22, 'bee sting']], ['see string', 
    [0, 2, 0], [22, 'd string']]] 

을하고 문제를 저장하고 검색하는 데.

내가 확인하여 피클 저장할 수 있습니다 : 나는 그것을로드하려고 할 때 다음과 같은 오류를

with open('afile','w') as f: 
    pickle.dump(a,f) 

하지만 얻을 :

나는 내가 NumPy와 배열로 변환 할 수 있다고 생각했다
pickle.load('afile') 

Traceback (most recent call last): 
    File "<pyshell#116>", line 1, in <module> 
    pickle.load('afile') 
    File "C:\Python27\lib\pickle.py", line 1378, in load 
    return Unpickler(file).load() 
    File "C:\Python27\lib\pickle.py", line 841, in __init__ 
    self.readline = file.readline 
AttributeError: 'str' object has no attribute 'readline' 

save, savez 또는 savetxt을 사용하십시오. 그러나 다음과 같은 오류 메시지가 나타납니다.

>>> np.array([a]) 

Traceback (most recent call last): 
    File "<pyshell#122>", line 1, in <module> 
    np.array([a]) 
ValueError: cannot set an array element with a sequence 
+5

('aFile 변수') pickle.load 할 ('aFile 변수'오픈()) 물론 –

+0

! 감사합니다 - 당신은 대답으로 그것을 넣지 않으시겠습니까? – atomh33ls

+0

불규칙한 모양을 가지고 있기 때문에'numpy.array'에있는 것을 쉽게 변환 할 수 없습니다. 커다란 규칙적인 배열을 만들고 모든 데이터를'NaN' 또는 그와 비슷한 것으로 채워야합니다. 기본적으로'pandas'가 당신을 위해하는 일입니다. 그러나 아마도 작은 목록에는 과도한 행동 일 것입니다. –

답변

31

답변으로하기로 결정했습니다. pickle.load 메소드는 object와 같은 파일을 가져 오려고하지만 대신 문자열을 제공하므로 예외가 발생합니다. 그래서 대신 :

pickle.load('afile') 

당신이해야 :

pickle.load(open('afile', 'rb')) 
+2

아마도'open ('afile', 'rb')'입니다. 'pickle' 문서의 노트 : * 바이너리 모드에서 프로토콜> = 1로 생성 된 pickle 파일을 항상 열어 두십시오. * – cdarke

13

이 @에 Rapolas K의 답변을 추가하려면 :

나는 그래서이 방법을 사용 닫지 파일에 문제를 남겼 : 대신 pickle.load의

with open('afile','rb') as f: 
    pickle.load(f)