기록하는삶

[파이썬/Python] pickle 모듈, 객체 영속화, 배열 저장 후 불러오기 본문

AI/파이썬(Python)

[파이썬/Python] pickle 모듈, 객체 영속화, 배열 저장 후 불러오기

mingchin 2022. 1. 13. 01:00
728x90
반응형

프로젝트를 진행하다보면 현재 메모리가 임시로 가지고 있는 값 자체를 영구적으로 저장해 놓았다가 다시 재사용해야 하는 경우들이 있다.(주피터 노트북에서 임시로 전처리를 진행중이라든가, 구글 코랩을 활용하는 상황 등등) 그것이 코드 자체라면 문제가 되지 않지만, 코드가 실행되며 발생되는 배열, 사전 등의 객체라든가 특정 전처리가 완료된 데이터에 대해 연산이 진행된 클래스라든가, 하는 경우에는 그것을 따로 저장할 방법이 필요한데 그것이 파이썬에서는 pickle이다.

 

a = list(range(100))
b = []
for x in a:
    if not x%7:
        b.append(x)
b

위 예시의 경우 실행 시간이 얼마 되지 않아 런타임이 끊기거나 재시작을 하더라도 다시 실행하면 그만이지만, 해당 중간의 결과물을 얻기까지 시간이 소요되고 이어서 작업을 진행할 필요가 있는 경우 중간 결과물인 리스트 b를 저장해두었다가 불러오고 싶은 상황이 있을 수 있다.

 

다루는 코드는 json과 비슷하다.

import pickle
f = open("listb.pickle","wb")
pickle.dump(b,f)
f.close()

이처럼 pickle에 저장하고, 런타임을 재시작해 메모리의 b를 없앤 뒤 아래처럼 실행해보면

b는 없는 상태가 되었다. 다시 피클로부터 b를 불러오면

import pickle
f = open("listb.pickle","rb")
p = pickle.load(f)
f.close()
print(p)

위처럼 pickle.load(f)를 객체로 받아오면 저장한 객체가 저장된다.

 

여러 객체를 하나의 pickle에 저장하고 불러오고 싶다면, dump를 여러 번 하고, 해당 횟수만큼 load하여 순서대로 객체를 전달 받으면 된다.

# 피클에 여러 객체 저장하고 불러오기
# 예시는 위의 리스트 b,a를 순서대로 저장하고 불러온 pickle  
import pickle
f = open("listab.pickle","rb")
p = pickle.load(f)
q = pickle.load(f)
f.close()
print(p)
print('='*99)
print(q)
728x90
반응형