2010-02-14 9 views
1

이 예제를 작성하는 데 도움이 될 수 있습니까?cPickle 사용 중 문제가 발생했습니다.

직렬화 된 dict이있는 경우로드하고 싶습니다. 수정 한 후 다시 덤프하십시오. 파일을 여는 데 사용하는 모드에 문제가 있다고 생각하지만 올바른 방법을 모르겠습니다.

import os 
import cPickle as pickle 

if os.path.isfile('file.txt'): 
    cache_file = open('file.txt', 'rwb') 
    cache = pickle.load(cache_file) 
else: 
    cache_file = open('file.txt', 'wb') 
    cache = dict.fromkeys([1,2,3]) 

# modifications of cache 

pickle.dump(cache, cache_file) 
cache_file.close()  

실행이 두 번 오류를 확인합니다 :

Traceback (most recent call last): 
    File "example.py", line 11, in <module> 
    pickle.dump(cache, cache_file) 
IOError: [Errno 9] Bad file descriptor 

답변

4

로드 할 때마다 (mode = 'rb'로) 열고, 파일 핸들을로드하고 닫아야합니다.
각 덤프마다 파일 핸들을 열고 (mode = 'wb'로), 덤프하고 닫아야합니다.

5

'rwb'open()에 대한 올바른 파일 열기 모드가 아닙니다. 시도하십시오 'r+b'.

그리고 파일을 읽은 후에는 커서가 파일의 끝에 위치하므로 pickle.dump(cache, cache_file)이 파일에 추가됩니다 (원하는 내용이 아닐 수도 있습니다). pickle.load(cache_file) 뒤에 cache_file.seek(0)을 시도하십시오.

1

읽기 및 쓰기 용 파일 (예 : 임의 액세스)을 열었습니다. 처음에 파일을 읽을 때 파일 끝에 파일 인덱스 위치를 남겨 둡니다. 나중에 데이터를 다시 쓸 때 같은 파일에 추가됩니다.

파일을 읽기 모드로 열고 데이터를 읽은 다음 닫은 다음 쓰기 모드로 다시 열어야합니다.

관련 문제