ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 예시로 배우는 파이썬 (pickle)
    PYTHON(파이썬)/파이썬 기초 2024. 10. 14. 08:51
    728x90
    반응형

     

    #############################################################################

    # Python 기초 12 : pickle

    # eplus(www.eiot.co.kr)-나도코딩(YouTube):파이썬 코딩 무료 강의 (기본편) 참조

    #############################################################################

    import pickle

     

    p_file = open("profile.pickle", "wb")

    profile = {"이름":"박명수", "나이":30, "취미":{"축구", "골푸", "코딩"}}

    print(profile)

     

    pickle.dump(profile, p_file)

    p_file.close

     

    p_file = open("profile.pickle","rb")

    profile = pickle.load(p_file)

    p_file.close

    Goover의 Pickle 이야기

    파이썬에서의 pickle 모듈은 객체를 직렬화(serialize)하고 역직렬화(deserialize)하기 위해 사용되는 매우 유용한 도구입니다. 직렬화는 메모리에서 객체의 상태를 바이트 스트림으로 변환하여 파일 등에 저장하게 해 주며, 역직렬화는 저장된 바이트 스트림을 다시 원래의 객체로 복원하는 과정을 의미합니다. 이렇게 객체를 저장하고 불러오는 기능은 데이터를 영속적으로 유지하고 다양한 애플리케이션에서 쉽게 공유할 수 있게 해 주므로, 여러 상황에서 광범위하게 활용됩니다.

    1. Pickle 모듈의 기본 사용법

    pickle 모듈을 사용하기 위해서는 먼저 해당 모듈을 임포트해야 합니다. 다음은 간단한 예입니다.

    import pickle

    # 저장할 데이터
    data = {'name': 'Alice', 'age': 30, 'city': 'New York'}

    # 데이터를 직렬화하여 파일에 저장
    with open('data.pkl', 'wb') as file:
        pickle.dump(data, file)

    # 파일에서 데이터를 읽어와 역직렬화
    with open('data.pkl', 'rb') as file:
        loaded_data = pickle.load(file)

    print(loaded_data)  # {'name': 'Alice', 'age': 30, 'city': 'New York'}

    위의 코드에서 pickle.dump() 함수는 data라는 딕셔너리 객체를 'data.pkl'이라는 파일에 직렬화하여 저장합니다. wb는 파일을 바이너리 쓰기 모드로 연다는 의미입니다. 그 후, pickle.load() 함수를 통해 바이너리 파일에서 객체를 불러와 loaded_data에 저장하고, 이를 출력하면 원래의 딕셔너리가 그대로 출력되는 것을 확인할 수 있습니다.

    2. Pickle의 유용성 및 적절한 사용 사례

    pickle 모듈은 다양한 데이터 유형을 직렬화할 수 있기 때문에, 데이터 분석, 머신러닝 모델 저장, 복잡한 데이터 구조 저장 등 여러 분야에서 유용합니다. 예를 들어, 머신러닝 모델을 학습한 후 해당 모델을 다시 사용해야 하는 경우, 모델의 파라미터와 구조를 pickle로 저장하고 필요할 때 불러올 수 있습니다.

    from sklearn.linear_model import LogisticRegression

    # 모델 학습
    model = LogisticRegression()
    # model.fit(X_train, y_train)

    # 모델 저장
    with open('model.pkl', 'wb') as file:
        pickle.dump(model, file)

    # 모델 불러오기
    with open('model.pkl', 'rb') as file:
        loaded_model = pickle.load(file)

    # loaded_model을 사용하여 예측
    # predictions = loaded_model.predict(X_test)

    3. Pickle의 주의 사항

    하지만 pickle 모듈의 사용 시 몇 가지 주의할 점도 있습니다. 

    보안 문제: 신뢰할 수 없는 소스에서 직렬화된 데이터를 로드하는 것은 보안상 위험할 수 있습니다. pickle은 코드 실행이 포함될 수 있는 임의의 객체를 복원할 수 있는 기능이 있으므로, 악의적인 코드가 포함될 수 있습니다. 따라서, 안전하지 않은 소스에서 제공된 pickle 파일을 로드하는 것은 피해야 합니다.


    호환성: pickle로 직렬화된 데이터는 Python의 특정 버전과 호환되지 않을 수 있습니다. 예를 들어, Python 2에서 직렬화된 객체는 Python 3에서 불러올 수 없는 경우가 많습니다. 따라서 장기적으로 데이터를 아카이브할 필요가 있다면 표준 포맷을 사용하는 것이 더 바람직할 수 있습니다.

    결론

    파이썬의 pickle 모듈은 객체를 쉽게 저장하고 불러올 수 있는 강력한 도구입니다. 직렬화와 역직렬화의 손쉬운 과정 덕분에 데이터 처리 및 머신러닝 작업에서 널리 사용됩니다. 하지만 보안과 호환성에 유의하며 신뢰할 수 있는 데이터에 대해서만 사용해야 합니다. 이러한 점을 이해하고 활용한다면, 파이썬 프로그래밍의 강력한 기능을 활용할 수 있을 것입니다.

    728x90
Designed by Tistory.