코딩/노트

[Python] Pickle

CDeo 2024. 11. 26. 22:42

Pickle

`Python`으로 작업을 하다보면, 종종 저장하기 애매한 `object`가 있습니다. 예를들어, 딕셔너리 정보를 저장하려 할 때, 데이터프레임으로 바꾸어 `.csv`로 저장해야 할 때가 그렇습니다. 이때 주로 사용하는 저장 방식이 `Pickle` 입니다. 이 모듈을 사용하면 특정 자료를 객체 구조 그대로 유지하며 저장 및 불러오기가 가능합니다. 

 

저장하는 과정을 `pickling`(또는 `serialization`, `marshalling` ...), 반대로 불러오는 과정을 `unpickling`이라고 합니다. 저장 과정이 `seialization` 직렬화 라고 불리는 이유는 오브젝트의 정보를 `Byte Stream`(정보를 연속적인 `0`과 `1`로 이진화 시켜 저장)으로 저장하기 때문입니다. 이를 통해 파일화된 객체를 주고 받을 수 있으며, 역직렬화로 원래의 객체를 복원할 수 있게 합니다. 추가로 `marshalling`은 `pickle` 이전의 `marshal`이라는 원시적인 직렬화 모듈에서 기인한 용어입니다. 이 모듈은 `.pyc`라는 파일 형식을 지원한다고 합니다.$^{[1]}$

Code

실제로 사용하는 방식으로는 읽고 쓰는 두가지만 정확히 알면 됩니다.

 

먼저 패키지를 불러옵니다.

import pickle

저장

저장 같은 경우 `pickle.dump()`와, binary를 write한다는 `wb`옵션을 이용하면 됩니다.

f = open('파일A.pickle', 'wb')
pickle.dump(객체A, f)
f.close()

보다 깔끔한 코드와, `close()`를 잊어먹을 수 있기때문에, 아래와 같이 `with`을 사용합니다.

with open('파일A.pickle', 'wb') as f:
    pickle.dump(객체A, f)

불러오기

불러오기는 `pickle.load()`와 `rb`(read binary) 옵션을 통해 가능합니다. `with`과 함께 쓰이면 아래와 같이 되겠네요.

with open('파일A.pickle', 'rb') as f:
    data = pickle.load(f)

참조

[1] https://docs.python.org/3/library/pickle.html

 

pickle — Python object serialization

Source code: Lib/pickle.py The pickle module implements binary protocols for serializing and de-serializing a Python object structure. “Pickling” is the process whereby a Python object hierarchy is...

docs.python.org

[그림] https://www.datacamp.com/tutorial/pickle-python-tutorial