Pickle

이찬·2023년 7월 7일
0

Python

목록 보기
11/17
post-thumbnail

pickle : 텍스트 상태의 데이터가 아닌 파이썬 객체 자체를 파일로 저장하는 것

왜 사용하는 걸까?
만약 우리가 10GB 짜리 raw text 파일을 파싱하여 필요한 부분을 빼내서 사용한다고 해봅시다.
raw text 에 있는 내용을 프로그램을 돌릴 때 마다 파싱하여 필요한 부분을 뺀다면 비효율 적이겠죠? 그래서 미리 필요한 부분을 딕셔너리 던, 리스트 던, 튜플 이던 저장을 해놓는 것 입니다.
근데 문자열이 아닌 객체를 파일에 쓸 수 없기에, pickle 모듈을 활용해 그 객체 자체를 바이너리로 저장하는 것 입니다.

  • pickle은 굉장히 유용합니다. 파이썬 객체 구조를 바이트 스트림으로 변환해서 저장할 수 있기 때문이다. 즉, 파이썬의 모든 객체를 다 저장할 수가 있다.

바이너리 파일이란?
사용자 또는 프로그램이 사용하던 정보나 숫자 값을 특별한 가공 없이 그대로 파일에 저장

pickle의 사용법

pickle.dump(객체, 파일) 로 저장하고
pickle.load(파일) 로 로딩

import pickle
my_list = ['a','b','c']
 
## Save pickle
with open("data.pickle","wb") as fw:
    pickle.dump(my_list, fw)
 
## Load pickle
with open("data.pickle","rb") as fr:
    data = pickle.load(fr)
print(data)
#['a', 'b', 'c']

객체 저장

import pickle

my_list = ['this', 'is', 'my', 'list']

with open('my_data.pickle', 'wb') as f:
  pickle.dump(my_list, f)
  • 파일을 열 때 "wb"모드로 연다. 그리고 pickle 모듈의 dump()함수를 이용해서 my_list라는 객체를 파일에 쓴다.
  • 이 코드를 실행하면 my_data.pickle이라는 파일이 생성된다.
  • 파일의 내용은 당연히 바이너리로 텍스트 에디터로 열면 제대로 알아볼 수 없다.
  • 파일을 오픈할 때 with 함수를 쓰면 좋다. with함수는 명시적으로 파일을 닫지 않아도 된다.

객체 로드

import pickle

with open('my_data.pickle', 'rb') as f:
  my_list = pickle.load( f)

print(my_list)

# ['this', 'is', 'my', 'list']
  • 파이썬 객체가 저장되어 있는 my_data.pickle 파일을 "rb"모드로 연다. 그리고 pickle 모듈의 load()함수를 이용해서 파일을 읽어들인다. 그리고 리턴되는 값을 my_list변수에 담는다.
profile
Kyunghee univ. IE 21

0개의 댓글