고급 파이썬 개발 과정
챕터
>
레벨
직렬화 모듈
압축 모듈
Objective
메시지와 명령을 보관 및 전송하기 위해 압축합니다.
여러 건설 지시사항, 선적 및 명세서가 제출되어 전송 또는 보관되어야 합니다. 이들을 수동으로 모두 보내는 대신, 파일을 압축 및 압축 해제하여 저장하거나 전송하는 좋은 방법이 있습니다. 이를 위해 압축 모듈을 사용하여 파일 크기를 줄이고 정보를 더 쉽게 관리할 수 있습니다. 우리가 단일 모듈을 배우고 사용했던 다른 문제들과 달리, 사용할 수 있는 몇 가지 압축 모듈이 있으며, 소수의 함수 선택으로 사용할 수 있습니다. 그것들은 다음과 같습니다:
빠른 압축 속도와 낮은 압축률을 위해서는 zlib 모듈을 사용합니다, import zlib 를 추가하세요. 우리의 목적을 위해 다음 함수를 사용할 것입니다: zlib.compress() , 이 함수는 하나의 인자를 사용하며, 이는 압축하려는 정보입니다. 인자는 문자열 대신 바이트 형태로 입력되어야 합니다.
중간 압축 속도와 중간 압축률을 위해서는 bz2 모듈을 사용합니다, import bz2 를 추가하세요. 우리의 목적을 위해 다음 함수를 사용할 것입니다:
bz2.compress(), 하나의 인자를 사용하며, 이는 압축하려는 정보입니다.bz2.decompress(), 하나의 인자를 사용하며, 이는 압축 해제하려는 정보입니다. 인자는 문자열 대신 바이트 형태로 입력되어야 합니다.
인자는 문자열 대신 바이트 형태로 입력되어야 합니다.
높은 압축률을 원하지만 압축 속도가 느린 경우, lzma 모듈을 사용합니다, import lzma 를 추가하세요. 우리의 목적을 위해 다음 클래스와 함수를 사용할 것입니다:
lzma.LZMACompressor(): 압축 객체를 생성하여 압축기를 활성화할 수 있게 하는 클래스입니다.compress(): 하나의 인자를 사용하며, 이는 압축하려는 정보입니다. 인자는 문자열 대신 바이트 형태로 입력되어야 합니다. 인자는 문자열 대신 바이트 형태로 입력되어야 합니다.
이 외에도, 우리는 bytes() 함수를 사용할 것입니다. 이 함수는 문자열을 바이트로 변환하는 기능을 제공하며, 압축에 유용합니다. 이 함수는 두 개의 인자를 받으며, 변환하려는 문자열과 우리의 목적에 맞게 'utf-8' 포맷을 사용합니다.
압축해야 하는 데이터를 포함하는 세 개의 상수가 있으며, 이들은 red_message, blue_message 그리고 green_message 라고 명명되어 있습니다. 먼저 빨간 카펫 위의 금색 X 표시까지 걸어가서, red_bytes 라는 변수를 만듭니다. red_message 상수를 가져와서, bytes() 함수를 사용하여 메시지를 'utf-8' 형식의 바이트로 변환합니다, 다음과 같이: 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 에는 red_message 의 길이를 구합니다, 다음과 같이: message_length = len(red_message) . compression_length 에는 red_compression 의 len() 값을 저장합니다.
두 변수가 모두 채워지면, 사전 작성된 write() 함수를 사용하고, message_length 와 compression_length 를 인자로 추가하여 압축 크기를 확인합니다. 이는 파일이 압축되지 않은 상태에 비해 얼마나 압축되었는지를 보여줍니다.
파란 카펫 위의 어두운 X 표시까지 걸어가서 컴퓨터를 바라보세요. blue_bytes 라는 변수를 만들고, blue_message 를 bytes() 함수를 사용하여 red_message 와 동일한 방식으로 바이트로 변환합니다. blue_message 상수를 가져와서, 데이터를 압축하기 위해 bz2.compress() 의 값을 저장하고, 인자로 blue_bytes 를 전달합니다, 다음과 같이: blue_message = bz2.compress(blue_bytes) .
blue_decompress 라는 변수를 만들고, bz2.decompress() 의 값을 저장하며, 인자로 blue_message 를 전달하여 압축 해제 후의 데이터를 확인합니다. 사전 작성된 display() 함수에 blue_message 와 blue _decompress 변수를 인자로 추가하여 메시지 데이터의 압축된 버전과 압축 해제된 버전을 확인합니다.
초록 카펫 위의 어두운 X 표시까지 걸어가서, compressor 라는 객체를 만들고, lzma.LZMACompressor() 로 채웁니다. 이는 lzma 함수를 사용할 수 있는 압축기 객체를 생성합니다. green_bytes 라는 변수를 만들고, green_message 를 bytes() 함수를 사용하여 red_message 와 blue message 를 변환한 것과 동일한 방식으로 바이트 형식으로 변환합니다.
green_compression 이라는 변수를 만들고, compressor.compress() 의 값을 저장하며, 인자로 green_bytes 를 추가합니다. 이를 통해 압축기 객체를 사용하여 메시지 데이터를 압축할 수 있습니다. 사전 작성된 display() 함수에 green_message 와 green_compression 변수를 인자로 추가하여 메시지와 압축 데이터를 확인합니다.
초록 카펫 위의 밝은 X 표시까지 걸어가서 책상을 바라보고, message_length 와 compression_length 라는 두 변수를 수정합니다. 이 변수들에는 len() 함수를 사용하여 압축 전과 후의 데이터 문자 길이를 저장할 것입니다. message_length 에는 green_message 의 길이를 len() 함수로 구합니다. compression_length 에는 green_compression 의 len() 값을 저장합니다. 두 변수가 모두 채워지면, 사전 작성된 write() 함수를 사용하고, message_length 와 compression_length 를 인자로 추가하여 압축 크기를 확인하고 레벨을 완료합니다.