KalelPark's LAB

[ CLEAN CODE ] Clean Python, Pickle이란? 본문

Python/CLEAN CODE

[ CLEAN CODE ] Clean Python, Pickle이란?

kalelpark 2022. 12. 21. 20:52

Pickle이란?

        - 텍스트 상태의 데이터가 아닌 파이썬 객체 자체를 바이너리 파일로 저장하는 것을 의미합니다.
        - 텍스트 형태로 파일을 저장하는 것이 아니라, Dictionary, list, tuple과 같은 형태로 필요한 부분을 저장하는 것이다.
           하지만, 문자열이 아닌 객체를 파일에 쓸 수 없기 때문에 pickle 모듈을 활용하여, 객체 자체를 binary로 저장하는 것이다.

        * 무거운 텍스트 파일을 binary형태로 저장한 것이기 때문에, 필요할 때만 불러오기만 하면 되기 때문에 속도가 상당히 빠릅니다.

 

Pickle Module로 저장하고 불러오기

import pickle

f = open("a.pkl", "rb")      # pickle 불러오기
temp = pickle.load(f)
f.close()

f = open("test.pkl", "wb")   # pickle 저장하기
pickle.dump(a, f)
f.close()

* 코드를 Clean하게 하기 위해서는,
   파일을 불러오면, 명시적으로 파일을 닫지 않아도, 떠나는 것이 가능한 with code를 활용하는 것이 가능합니다.

array = [1, 2, 3]
with open("test.pkl", "wb") as f:
    pickle.dump(a, f)

Pandas DataFrame을 Pickle로 저장하는 것이 가능합니다.
Pickle로 저장한다면, 이전에 말씀드렸다시피, Dataframed을 불러올 때, 주로 사용하는 pd.read_csv보다 속도가 상당히 빠릅니다.

import pickle
import pandas as pd

df = pd.DataFrame({"a" : [1, 2, 3], "b" : [4, 5, 6]})
df.to_pickle("df.pkl")   # pandas pickle로 저장하기

df = pd.read_pickle("df.pkl")

* Pickle을 활용할 때, 주의할 점이 있는데, Pickle라이브러리가 파일을 공유하는 사람의 Pickle라이브러리와의 버전이 서로 다르면
   파일이 열리지 않는다는 것을 유의해야 합니다.

 

마지막 예제를 하나 더, 살펴보도록 하겠습니다.

* pickle.dump로 객체(값)을 저장할 때는, 반드시 파일모드를 "wb"로 지정해야 합니다.
   b는 binary를 의미하며, 컴퓨터가 처리하는 파일 형식으로 편집기로 열어도 알아보기 힘듭니다.

 

import pickle

name = "Kalel"
age = 24
address = "Seoul"
scores = {'korean': 90, 'english': 95, 'mathematics': 85, 'science': 82}

with open("wongis.p", "wb") as file:
    pickle.dump(name, file)
    pickle.dump(age, file)
    pickle.dump(address, file)
    pickle.dump(scores, file)

 

Comments