IT Share you

피클과 선반의 차이점은 무엇입니까?

shareyou 2020. 12. 1. 20:03
반응형

피클과 선반의 차이점은 무엇입니까?


처음으로 객체 직렬화에 대해 배우고 있습니다. 나는 pickle과 shelve 모듈의 차이점을 읽고 '인터넷 검색'을 시도했지만 이해하지 못합니다. 어느 것을 사용해야합니까? Pickle은 모든 파이썬 객체를 파일로 지속될 수있는 바이트 스트림으로 바꿀 수 있습니다. 그렇다면 모듈 선반이 필요한 이유는 무엇입니까? 피클이 더 빠르지 않습니까?


pickle 일부 객체 (또는 객체)를 파일의 단일 바이트 스트림으로 직렬화하기위한 것입니다.

shelvepickle객체가 피클되지만 키 (일부 문자열)와 연결되는 직렬화 사전을 기반으로 빌드 하고 구현하므로 선반 데이터 파일을로드하고 키를 통해 피클 된 객체에 액세스 할 수 있습니다. 많은 객체를 직렬화하는 것이 더 편리 할 수 ​​있습니다.

다음은 둘 사이의 사용 예입니다. (최신 버전의 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

반응형