본문 바로가기
개발/Python

[파이썬, Python] pickle 활용법 총정리

by 꾀돌이 개발자 2024. 7. 10.
반응형

 

Pickle 활용하기

 

 

- 파이썬의 pickle 모듈은 파이썬 객체를 직렬화(serialize)하고 역직렬화(deserialize)하는 데 사용됩니다.

- 직렬화는 객체를 바이트 스트림으로 변환하여 파일로 저장하거나 네트워크를 통해 전송할 수 있게 만드는 과정입니다.

- 역직렬화는 그 바이트 스트림을 다시 원래의 파이썬 객체로 복원하는 과정입니다.

 

 

[주요 기능과 사용법]

 

- 직렬화(Serialization)

  • pickle.dump(obj, file): 객체 obj를 파일 file에 직렬화하여 저장합니다.
  • pickle.dumps(obj): 객체 obj를 직렬화하여 바이트 객체를 반환합니다.

 

- 역직렬화(Deserialization)

  • pickle.load(file): 파일 file로부터 객체를 읽어와 역직렬화합니다.
  • pickle.loads(bytes_object): 바이트 객체로부터 객체를 역직렬화합니다.

 

 

[사용 예시]

 

import pickle

# 객체 생성
data = {'key': 'value', 'number': 42}

# 객체를 파일에 저장
with open('data.pickle', 'wb') as file:
    pickle.dump(data, file)

# 파일에서 객체를 읽어옴
with open('data.pickle', 'rb') as file:
    loaded_data = pickle.load(file)
    
# 객체를 바이트 스트림으로 직렬화 (pickle.dumps)
serialized_data = pickle.dumps(data)

# 바이트 스트림에서 객체를 역직렬화 (pickle.loads)
deserialized_data = pickle.loads(serialized_data)

 

 

[고급 사용법]

 

- 커스텀 객체 직렬화:

  • 사용자 정의 클래스의 객체를 직렬화하려면, 해당 클래스에 __reduce__ 또는 __reduce_ex__ 메서드를 정의하여 커스텀 직렬화 로직을 구현할 수 있습니다.
class CustomClass:
    def __init__(self, value):
        self.value = value

    def __reduce__(self):
        return (self.__class__, (self.value,))

obj = CustomClass(10)
serialized_obj = pickle.dumps(obj)
deserialized_obj = pickle.loads(serialized_obj)
print(deserialized_obj.value)  # 출력: 10

 

- 압축과 결합

  • pickle 모듈을 gzip 모듈과 결합하여 데이터를 압축된 형식으로 저장할 수 있습니다.
import gzip

data = {'key': 'value', 'number': 42}

with gzip.open('data.pickle.gz', 'wb') as file:
    pickle.dump(data, file)

with gzip.open('data.pickle.gz', 'rb') as file:
    loaded_data = pickle.load(file)

print(loaded_data)

 

반응형