피클은 우리에게 익숙합니다. 파이썬에서 피클은 파이썬의 모든 객체를 저장할 수 있기 때문에 굉장히 유용합니다. pickle 모듈은 파이썬 내장모듈로 별도로 설치하지 않아도 됩니다. 오늘은 파이썬 pickle 피클을 이용해서 파이썬 객체를 저장하고, 불러오는 방법에 대해서 알아보겠습니다.
파이썬 pickle이란?
'pickle'을 영어사전에서 찾아보았지만 피클, 소량, 소액 외에 다른 뜻을 찾기 어려웠습니다. 왜 pickle이라고 이름을 지었는지는 모르겠지만, pickle은 굉장히 유용합니다. 파이썬 객체 구조를 바이트 스트림으로 변환해서 저장할 수 있기 때문이지요. 즉, 파이썬의 모든 객체를 다 저장할 수가 있는 것입니다.
파이썬 pickle의 사용방법은?
피클을 사용하는 방법은 2가지가 있습니다. 하나는 피클 모듈을 이용해서 바이트로 저장하고 불러오는 것입니다. 이 때는 dump와 load함수를 이용합니다. dump는 '버리다, 떠넘기다'라는 뜻이 있습니다. 객체를 파일로 떠넘긴다고 이해하면 어떨까 싶네요.
1. 피클 모듈로 저장하고 불러오기
이 방법을 이용하면 파이썬의 모든 객체를 저장하고 불러올 수 있습니다. 학습한 모델도 피클로 저장하고 불러오면 편리합니다.
# pickle 불러오기
import pickle
f = open("a.pkl", "rb")
temp = pickle.load(f)
f.close()
# pickle로 저장하기
f = open("test.pkl", "wb")
pickle.dump(a, f)
f.close()
참고로 파일을 오픈할 때 with함수를 쓰면 좋습니다. with함수를 쓰면 명시적으로 파일은 닫지 않아도 됩니다. with 블록을 떠나는 시점에 닫는 동작이 수행되기 때문이지요. 따라서 예외가 발생하거나 실행이 중단되더라도 파일은 닫기가 됩니다.
a = [1 , 2, 3]
with open("test.pkl", "wb") as f:
pickle.dump(a, f)
2. 객체에 정의된 피클 함수 이용하기
일부 클래스의 경우에는 pickle로 저장하는 방법이 함수로 구현된 경우가 있습니다. 일부라고 했지만 필자가 알고 있는 것은 사실 pandas 데이터프레임이 전부입니다. 하지만 피클로 저장하는 방법이 구현된 다른 클래스도 어딘가 더 있지 않을까 싶습니다.
사용방법은 위에 파일을 이용하는 것보다 훨씬 간단합니다. 함수 하나만 호출하면 되기 때문입니다.
# pandas 데이터 프레임 pickle로 저장하기
import pickle
import pandas as pd
df = pd.DataFrame({"a": [1, 2, 3], "b": [1, 3, 4]})
df.to_pickle("df.pkl")
# 데이터프레임 pickle 불러오기
df = pd.read_pickle("df.pkl")
오늘은 이렇게 파이썬 pickle 피클로 저장하고 불러오는 방법에 대해서 알아보았습니다. pandas의 데이터프레임 같은 경우에도 csv파일로 저장하는 것보다 피클로 저장하는 것이 훨씬 편리합니다. 데이터 타입도 그대로 저장되고 속도도 훨씬 빠르기 때문입니다. 하지만 다른 사람에게 데이터를 전달할 때는 pickle말고 다른 형식을 이용하는 것이 좋습니다. pickle 버전이 다르면 다른 사람의 피씨에서 파일이 열리지 않기 때문입니다.
'파이썬 > 파이썬 기초' 카테고리의 다른 글
파이썬 패키지 설치 오류, 깃허브(Github)를 이용해서 해결하기! (0) | 2022.01.12 |
---|---|
파이썬 람다(lambda) 익명함수란? 사용하는 방법은?! (0) | 2022.01.11 |
파이썬 함수의 종류와 정의, 사용법 알아보기! (0) | 2022.01.11 |
파이썬 기초 개념, 변수와 함수 알아보기 (2) | 2022.01.10 |
파이썬 반복문에 enumerate 사용하는 방법 알아보기! (0) | 2021.12.22 |
웹크롤링 필수 라이브러리 beautifulsoup 사용 방법과 유용한 팁! (0) | 2021.12.21 |
파이썬 입력마라미터 받는 법 - sys, argparse (0) | 2021.12.19 |
파이썬 인터넷 파일 다운로드 받기, urlretrieve 사용법은?! (0) | 2021.12.16 |