반응형
피클과 선반의 차이점은 무엇입니까?
처음으로 객체 직렬화에 대해 배우고 있습니다. 나는 pickle과 shelve 모듈의 차이점을 읽고 '인터넷 검색'을 시도했지만 이해하지 못합니다. 어느 것을 사용해야합니까? Pickle은 모든 파이썬 객체를 파일로 지속될 수있는 바이트 스트림으로 바꿀 수 있습니다. 그렇다면 모듈 선반이 필요한 이유는 무엇입니까? 피클이 더 빠르지 않습니까?
pickle
일부 객체 (또는 객체)를 파일의 단일 바이트 스트림으로 직렬화하기위한 것입니다.
shelve
pickle
객체가 피클되지만 키 (일부 문자열)와 연결되는 직렬화 사전을 기반으로 빌드 하고 구현하므로 선반 데이터 파일을로드하고 키를 통해 피클 된 객체에 액세스 할 수 있습니다. 많은 객체를 직렬화하는 것이 더 편리 할 수 있습니다.
다음은 둘 사이의 사용 예입니다. (최신 버전의 Python 2.7 및 Python 3.x에서 작동해야 함).
pickle
예
import pickle
integers = [1, 2, 3, 4, 5]
with open('pickle-example.p', 'wb') as pfile:
pickle.dump(integers, pfile)
이렇게하면 integers
목록이라는 바이너리 파일로 덤프됩니다 pickle-example.p
.
이제 절인 파일을 다시 읽어보십시오.
import pickle
with open('pickle-example.p', 'rb') as pfile:
integers = pickle.load(pfile)
print integers
위의 출력이 [1, 2, 3, 4, 5]
.
shelve
예
import shelve
integers = [1, 2, 3, 4, 5]
# If you're using Python 2.7, import contextlib and use
# the line:
# with contextlib.closing(shelve.open('shelf-example', 'c')) as shelf:
with shelve.open('shelf-example', 'c') as shelf:
shelf['ints'] = integers
사전과 같은 액세스를 통해 선반에 개체를 추가하는 방법을 확인합니다.
다음과 같은 코드를 사용하여 개체를 다시 읽습니다.
import shelve
# If you're using Python 2.7, import contextlib and use
# the line:
# with contextlib.closing(shelve.open('shelf-example', 'r')) as shelf:
with shelve.open('shelf-example', 'r') as shelf:
for key in shelf.keys():
print(repr(key), repr(shelf[key])))
출력은 'ints', [1, 2, 3, 4, 5]
.
참고 URL : https://stackoverflow.com/questions/4103430/what-is-the-difference-between-pickle-and-shelve
반응형
'IT Share you' 카테고리의 다른 글
segfault 커널 로그 메시지를 읽는 방법 (0) | 2020.12.01 |
---|---|
GraphViz에서 범례 / 키 만들기 (0) | 2020.12.01 |
lib의 JAR 내부에서 JSP를 제공 할 수 있습니까? 아니면 해결 방법이 있습니까? (0) | 2020.12.01 |
SQL Server 2008 R2에서 원격 프로 시저 호출이 실패했습니다. (0) | 2020.12.01 |
목록 목록을 병합하는 방법은 무엇입니까? (0) | 2020.12.01 |