[Python] Pickle
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