Pickle을 사용하여 Python에서 객체 저장 및 로드

Hafiz Muhammad Zohaib 2023년6월21일
Pickle을 사용하여 Python에서 객체 저장 및 로드

이 문서에서는 Python에서 객체를 저장하고 다시 로드하는 방법을 보여줍니다. 또한 Python을 사용하여 피클링 및 피클링 해제를 이해합니다. 또한 절임의 장단점을 볼 것입니다.

절임 및 역절임

개체의 직렬화는 개체의 상태를 하드 드라이브에 저장할 수 있도록 개체를 비트 형식으로 변환하는 방법입니다. 많은 언어가 객체 직렬화 방법을 제공하지만 Python은 모든 언어에서 더 유연합니다.

Python에서는 객체 직렬화를 피클링이라고 하고 역직렬화를 언피클링이라고 합니다. 우리는 주로 파이썬에서 객체를 사용합니다. 따라서 거의 모든 것을 직렬화/비직렬화할 수 있습니다. 다만, 주의가 불가피하며 절임의 목적을 잘 알고 사용하셔야 합니다.

이론적 세부 사항으로 이동하기 전에 Pickle 모듈을 사용하여 Python에서 피클링을 시연해 보겠습니다.

파이썬에서 피클링

피클링의 경우 먼저 pickle 모듈을 가져옵니다.

import pickle

우리는 파이썬에서 거의 모든 객체를 직렬화할 수 있습니다. 데모 목적으로 사전 개체를 사용하겠습니다.

bio_dict = {"name": "Zohaib", "age": 29, "profession": "Engineer"}

‘pickle’에는 개체를 직렬화하는 ‘.dump()’ 함수가 포함되어 있습니다.

with open("bio_dict.pickle", "wb") as file_name:
    pickle.dump(bio_dict, file_name)

위의 코드에서 우리는 쓰기 권한(즉, wb)으로 bio_dict.pickle 파일을 연 다음 .dump() 함수를 사용하여 bio_dict 사전을 pickle 파일로 피클했습니다. 그 결과 사전을 바이트 스트림 형식으로 성공적으로 변환했습니다.

파이썬에서 언피클링

절인 개체를 다시 사용해야 하는 경우 역직렬화할 수 있습니다. 이를 위해 아래 코드와 같이 pickle.load() 함수를 사용할 수 있습니다.

with open("bio_dict.pickle", "rb") as file_name:
    unpickled_dict = pickle.load(file_name)

print("The retrieved dictionary is: ", unpickled_dict)

이전에 저장된(.pickle) 파일을 연 다음 .load() 함수를 사용하여 객체를 다시 가져왔습니다. 위의 코드는 다음 출력을 생성합니다.

The retrieved dictionary is:  {'name': 'Zohaib', 'age': 29, 'profession': 'Engineer'}

다음 코드를 사용하여 피클된 객체와 피클되지 않은 객체가 동일한지 여부를 확인할 수 있습니다.

assert bio_dict == unpickled_dict

산세척의 장단점

다음은 Python에서 피클링의 이점입니다.

  1. JSON 및 기타 직렬화 기술과 달리 Python에서 거의 모든 Python 개체가 이 pickle 모듈로 직렬화될 수 있습니다.

  2. 나중에 절인 물건을 사용할 수 있습니다. 예를 들어 대규모 계산을 수행하고 개체를 절인 경우입니다. 그러면 다음에 새 Python 세션을 시작할 때 이전에 완료한 대규모 계산을 다시 수행할 필요가 없습니다.

    대신 절인 개체를 피클 해제하고 새 계산에 사용합니다. 이렇게 하면 시간과 리소스를 절약할 수 있습니다.

  3. 피클된 객체는 여러 스레드에서 효율적으로 읽을 수 있으므로 빠른 병렬 계산이 가능합니다.

산 세척에는 여러 가지 결과가 있습니다. 피클을 사용하기 전에 알아 두어야 합니다.

  1. 신뢰할 수 없는 출처에서 수집한 데이터를 언피클링해서는 안 됩니다. 변경된 데이터 또는 심각한 보안 문제를 일으킬 수 있는 임의로 취약한 일부 코드가 포함될 수 있습니다.
  2. JSON 파일과 달리 피클된 파일은 사람이 읽을 수 없습니다.
  3. JSON 파일은 여러 언어로 사용 및 지원될 수 있습니다. 반면 Python의 pickle 파일은 많은 언어에서 지원되지 않을 수 있으며 어댑터 역할을 하기 위해 관련 타사 중간 라이브러리가 필요할 수 있습니다.

그 밖에 절일 수 있는 것

설명하는 데 많은 시간이 필요한 중요한 포인트입니다. 그러나 간단히 말해서 함수, Pandas 데이터 프레임 및 기타 여러 가지와 같은 많은 Python 항목을 피클할 수 있습니다.

Pickle은 또한 모델을 보존하고, 시간 소모적인 재훈련을 줄이고, 이전에 훈련된 모델을 공유, 커밋 및 다시 로드할 수 있기 때문에 기계 학습에 매우 유용한 도구입니다.

피클을 사용하여 기계 학습 모델을 저장하려면 이 가이드를 따를 수 있습니다.