About
home
About Me
home
🥧

Pickle

Date
2020/10/13
Writer
Category
Python
Python Pickle 모듈에 대해 정리한 글입니다. [Updating 중입니다]
모듈이란 클래스, 함수, 변수 들을 모아 놓은 스크립트 파일로서 주로 간단한 기능을 담을 때 사용한다. 파이썬 모듈의 경우 파이썬 코드를 묶어서 관리하고 사용할 수 있도록 구성되어 있고 보통 하나의 .py 파일이 하나의 모듈이 된다.
from Module(모듈 이름) import Class(클래스명) import Module(모듈 이름)
Python
파이썬의 경우 표준 라이브러리를 통해 다양한 모듈들을 제공하고 있고, 파이썬을 설치할 때 함께 설치된다. 여기서 라이브러리란, 프로그램의 구성 요소로 사용하기 위해 미리 만들어 둔 프로그램 조각으로 자주 사용하는 기능들을 모아 모듈 또는 패키지로 만든 것이다. 한 번 만들어두면 계속 사용할 수 있고 다른 사람들과도 공유할 수 있다. 표준 라이이브러리의 경우, 파이썬이 공식적으로 제공하는 모듈로서 파이썬으로 프로그램을 작성할 때 가장 중요하고 빈번히 사용되는 기능들을 모듈로 묶어 제공한다.
수많은 파이썬 모듈들 중 Pickle에 대해 알아보려고 한다.

1. Pickle?

텍스트가 아닌 자료형 데이터/객체 자체를 저장하고 불러올 때 유용한 모듈이다. 즉 원하는 데이터를 자료형 변경 없이 파일로 저장해서 사용할 수 있다. Pickle은 방대한 파일에서 필요한 객체 자체를 binary 형태로 저장한다. 따라서 용량도 매우 작고 저장된 파일을 불러오는 형태라 속도도 빠르다.
Pickle 모듈을 사용하기 위해 먼저 모듈 임포트가 필요하다. 아래와 같이 한 번 임포트한 .py 파일 내에서는 추가 임포트 없이 사용할 수 있다.
import pickle
Python

2. How to Use Pickle.

Pickle의 사용법은 꽤나 간단하다.
import pickle data = { 'num': [-1, 0, 1, 1e-4], 'txt': ("cute dog", "small cat"), 'bool': {True, False, None} }
Python

2.1. pickle.dump()

데이터를 저장하거나 불러올 때는 바이트 형식으로 파일을 읽고 써야한다:: 'wb' & 'rb'
"wb" - binary file 쓰기 모드. - wb 로 데이터 입력하는 경우 .bin 확장자를 이용하는 것이 좋다.
pickle.dump() - 파이썬 객체를 직렬화(serialization)하여 binary file에 저장하기
# save with open('data_list.bin', 'wb') as file: for data in txt_list: pickle.dump(data, file) # pickle.dump(MyObject, MyFile)
Python

2.2. pickle.load()

"rb" - binary file 읽기 모드
pickle.load()
- pickle.dump()로 직렬화 되어있는 binary file로부터 파이썬 객체를 역직렬화(deserialization)
# load with open('data.bin', 'rb') as file: data = pickle.load(file) # pickle.load(MyFile)
Python
(※더이상 로드할 데이터 없으면 EOFError 발생한다.)
# Whole Load process import pickle with open('data.bin', 'rb') as file: data_list = [] while True: try: data = pickle.load(file) except EOFError: break data_list.append(data)
Python

2.3. pickle.dumps()? pickle.loads()?

앞서 살펴 본 내용은 pickle.dump()와 pickle.load()였다. 그런데 공부하다 보니 뒤에 '-s'가 붙은 pickle.dumps()pickle.loads()가 있어 간단하게 정리해본다.
pickle.dumps()
파이썬 객체를 직렬화하여 메모리에 binary objects로 저장
사람이 읽을 수 없는 형태
컴퓨터에게는 데이터 저장에 더 효율적인 형태
pickle.loads()
pickle.dumps()로 직렬화 돼있는 bytes objects를 객체로 역직렬화