0
나는 간단한 작업을 수행하려고 :
1. 역 직렬화 이전에 직렬화 된 객체를
2. 업데이트를 나중에 다시 그것을 직렬화 객체
3.파이썬 : 업데이트 직렬화 객체
I을 사용하십시오 운이없는 pickle
으로 해보려고했습니다.
empty_list = []
f = open('backup.p', 'wb')
pickle.dump(empty_list, f)
f.close()
이상 : :
나는이 일을하여 시작
f = open('backup.p', 'rb+')
l = pickle.load(f)
l.append('string')
pickle.dump(l, f)
f.close()
을하지만 다시 가정으로 업데이트 된 목록로드하려고하면
f = open('backup.p', 'rb')
updated_list = pickle.load(f)
print(updated_list) # prints [] instead of ['string']
f.close()
왜 두 번째를하지 않습니다 dump()
으로 전화하면 backup.p
의 내용을 새 목록 ['string']
으로 덮어 쓰시겠습니까? 원하는 동작을 얻으려면 buckup.p
을 제거해야합니까? 이 후
두 번째 덤프 바로 전에 f.truncate (0) '예를 들어) 나중에 추적하려고 할 때'KeyError' 예외가 발생합니다 : "'Traceback (최근 호출 마지막) : 파일"./test.py ", 줄 28, updated_list = pickle. load (f) 파일 "/usr/lib64/python2.6/pickle.py"1370 행로드 반환 Unpickler (파일) .load() 파일 "/usr/lib64/python2.6/pickle. py ", 858 행,로드 중 디스패치 [key] (self) KeyError : '\ x00''" –
@ so.very.tired : 나는'truncate'를 조금 잘못 이해 한 것처럼 보입니다. 잘린 파일이 파일의 현재 위치보다 짧으면 실제로 파일 위치를 이동시키지 않으므로'seek'와'truncate'가 모두 필요합니다. – user2357112
예. 그것은 나를 위해 일했다. 감사! –