-
[pickle] dump, load 알아보기 ( Serialization )Python 2021. 12. 15. 15:25728x90반응형
- 목차
들어가며.
이번 글에서는 pickle 모듈의 사용법에 대해서 알아보려고 합니다.
pickle 모듈은 자주 사용하는 대상이지만 사용할 때마다 그 사용법이 헷갈리곤 합니다.
이 글에서 다양한 사례들을 작성하여 dump 와 load 함수를 손쉽게 사용할 수 있도록 하려고 합니다.
pickle.dump
pickle.dump 함수를 데이터를 저장하는 용도로 사용됩니다.
직렬화하고자 하는 데이터를 특정 파일로 저장할 수 있습니다.
흔히 메모리 상에 존재하는 Python Object 들을 Pickle File 형식으로 직렬화 및 저장할 수 있습니다.
아래의 예시는 "hi" 라는 텍스트를 write_text.txt 파일에 저장하는 예시입니다.
더 구체적으로 표현하면, Python 의 String 객체를 write_text.txt 파일로 직렬화 후 저장하게 됩니다.
import pickle with open("./write_text.txt", "wb") as handle: pickle.dump("hi", handle, protocol=pickle.HIGHEST_PROTOCOL)
관습적으로 open API 를 통해서 생성되는 파일의 레퍼런스는 handle 이라고 변수명을 붙입니다.
pickle.dump 를 활용하여 파이썬 객체를 파일로써 저장하기 위해서는 저장하고자 하는 파일을 open API 를 통해서 미리 참조해야합니다.
그래서 with open 을 통해서 handle 객체를 생성합니다.
그리고 protocol 은 pickle.HIGHEST_PROTOCOL 을 사용하였습니다.
일반적인 네트워크 통신과 같이 pickle 의 File Read/Write 에서도 Protocol 이 사용됩니다.
HTTP, TCP, FTP 등과 같이 정상적인 네트워크 통신을 위해서 송신과 수신측에서 동일한 프로토콜을 사용해야하듯이,
pickle.dump 의 과정에서 어떤 Protocol 을 사용할지 설정할 수 있습니다.
Protocol 은 거창한 개념은 아닙니다.
Python Version 에 따라서 1 ~ 5 까지의 범위의 버전이 존재하구요.
pickle.HIGHEST_PROTOCOL 를 사용하게 되면 사용 중인 파이썬 버전에서 지원하는 가장 높은 버전을 사용함을 뜻합니다.
이러한 방식으로 Dict, List, Tuple, Class 등의 다양한 파이썬 객체의 직렬화가 가능합니다.
pickle.load
pickle.load 는 pickle.dump 의 반대 개념입니다.
pickle.load 는 저장된 파일을 읽어들여서 역직렬화하는 프로세스를 수행합니다.
아래의 예시와 같이 pickle.dump 를 통해서 직렬화 및 저장한 파일을 읽여들입니다.
이때에도 open API 를 통해서 handle 레퍼런스를 취해야합니다.
이때에 rb mode 를 통해서 Binary Read Only 설정을 취합니다.
import pickle with open("./write_text.txt", "rb") as handle: text = pickle.load(handle)
pickle.dumps
pickle.dump 뿐만 아니라 dumps 함수가 존재합니다.
이는 Pickle 로 직렬화시킨 결과를 그대로 반환합니다.
아래의 예시와 같이 "hi" 라는 Python String 이 직렬화된 결과가 serialized_hi 변수에 저장됩니다.
import pickle serialized_hi = pickle.dumps("hi", protocol=pickle.HIGHEST_PROTOCOL)
그리고 아래와 같이 직렬화된 serialized_hi 를 File Write 를 하면 pickle.dump 와 동일한 결과를 만듭니다.
with open("./write_text.txt", "wb") as handle: handle.write(serialized_hi)
반응형'Python' 카테고리의 다른 글
[numpy] axis 사용법 ( min, max, sum ) 알아보기 (0) 2023.09.06 [Pandas] stack 사용하여 Pivot Table 만들기 ( pivot_table ) (0) 2023.07.10 [pandas] get_dummies 알아보기 ( One Hot Encoding ) (0) 2023.02.06 Matplotlib Scatter 사용법 알아보기 (0) 2023.01.21 [pandas] to_datetime 함수 알아보기 (0) 2022.12.20