고급 파이썬 개발 과정
챕터
>
레벨
직렬화 모듈
압축 모듈
목표
메시지와 주문을 보관 및 전송을 위해 압축합니다.
여러 건설 지침, 선적 및 명세서가 제출되어 전송 또는 보관이 필요합니다. 이들을 수동으로 모두 전송할 수도 있지만, 파일을 압축 및 해제한 후 저장하거나 전송하는 방법이 더 효과적입니다. 이를 위해 압축 모듈을 사용하여 파일 크기를 줄이고 정보를 보다 쉽게 관리할 수 있습니다. 이전에 단일 모듈만을 학습하고 사용했던 문제들과 달리, 이번에는 여러 압축 모듈을 사용하며 각 모듈에는 몇 가지 함수가 제공됩니다. 이들은 다음과 같습니다:
빠른 압축 속도와 낮은 압축률이 필요한 경우 import zlib로 zlib 모듈을 사용합니다. 여기서는 다음 함수를 사용합니다: zlib.compress(), 하나의 인수를 사용하며 압축할 정보를 인자로 받습니다. 인수는 문자열이 아닌 바이트 형식으로 전달해야 합니다.
중간 압축 속도와 중간 압축률이 필요한 경우 import bz2로 bz2 모듈을 사용합니다. 여기서는 다음 함수를 사용합니다:
bz2.compress(), 하나의 인수를 사용하며 압축할 정보를 인자로 받습니다.bz2.decompress(), 하나의 인수를 사용하며 압축 해제할 정보를 인자로 받습니다. 인수는 문자열이 아닌 바이트 형식으로 전달해야 합니다.
높은 압축률이 필요하지만 느린 압축 속도를 감수할 수 있는 경우 import lzma로 lzma 모듈을 사용합니다. 여기서는 다음 클래스와 함수를 사용합니다:
lzma.LZMACompressor(): 압축 객체를 생성하여 압축을 수행할 수 있게 해주는 클래스입니다.compress(): 하나의 인수를 사용하며 압축할 정보를 인자로 받습니다. 인수는 문자열이 아닌 바이트 형식으로 전달해야 합니다.
이 외에도 bytes() 함수를 사용하여 문자열을 바이트로 변환합니다. 이 함수는 변환할 문자열과 형식 두 개의 인수를 사용하며, 여기서는 'utf-8' 형식을 사용합니다.
압축해야 할 데이터가 포함된 세 가지 상수는 red_message, blue_message, green_message입니다. 먼저 빨간 카펫 위의 금색 X 표시 지점으로 이동하여 red_bytes라는 변수를 만듭니다. bytes() 함수를 사용해 red_message를 바이트로 변환합니다. 예: red_bytes = bytes(red_message, 'utf-8').
red_compression이라는 변수를 만들고 zlib.compress()의 반환값을 저장합니다. red_bytes를 인수로 전달하여 압축합니다. 예: red_compression = zlib.compress(red_bytes). 압축된 데이터를 확인하려면 미리 작성된 display() 함수에 red_message와 red_compression을 인수로 전달합니다.
빨간 카펫 위의 밝은 X 표시 지점으로 이동하여 책상 방향을 바라보고 message_length와 compression_length라는 변수를 만듭니다. len() 함수를 사용해 압축 전후의 길이를 저장합니다. 예: message_length = len(red_message) 및 compression_length = len(red_compression). 완료되면 write() 함수에 두 변수를 인수로 전달하여 압축 크기를 검증합니다.
파란 카펫 위의 어두운 X 표시 지점으로 이동하여 컴퓨터를 마주보고 blue_bytes를 만들고 bytes()를 사용해 blue_message를 바이트로 변환합니다. bz2.compress() 반환값을 blue_message에 저장하여 압축합니다. 예: blue_message = bz2.compress(blue_bytes).
blue_decompress라는 변수를 만들어 bz2.decompress() 반환값을 저장하고, blue_message를 인수로 전달해 압축 해제된 데이터를 확인합니다. display() 함수에 blue_message와 blue_decompress를 인수로 전달하여 압축된 버전과 해제된 버전을 확인합니다.
초록 카펫 위의 어두운 X 표시 지점으로 이동해 compressor 객체를 lzma.LZMACompressor()로 생성합니다. green_bytes를 만들고 bytes()를 사용해 green_message를 바이트로 변환합니다.
green_compression이라는 변수를 만들고 compressor.compress() 반환값을 저장하며 green_bytes를 인수로 전달합니다. display() 함수에 green_message와 green_compression을 인수로 전달하여 메시지와 압축된 데이터를 확인합니다.
초록 카펫 위의 밝은 X 표시 지점으로 이동해 책상 방향을 바라보고 message_length와 compression_length를 수정합니다. len(green_message) 및 len(green_compression)을 각각 저장한 후, write() 함수에 두 변수를 인수로 전달해 압축 크기를 검증하고 레벨을 완료합니다.