ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [pickle] dump, load 알아보기 ( Serialization )
    Python 2021. 12. 15. 15:25
    728x90
    반응형

     

    - 목차

     

    들어가며.

    이번 글에서는 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)

     

     

    반응형
Designed by Tistory.