Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python(zlib)에서 gzip과 호환되는 압축

<시간/>

zlib 모듈은 GNU 프로젝트의 일부인 Zlib 압축 라이브러리(https://www.zlib.net)의 Python 구현을 제공합니다.

이 기사에서는 zlib 모듈에 정의된 중요한 기능에 대해 설명합니다.

압축()

이 함수는 decompress() 함수와 함께 이 모듈에 대한 기본 인터페이스입니다. 이 함수는 매개변수로 주어진 데이터를 압축하여 바이트 객체를 반환합니다. 이 함수에는 압축 범위를 제어하는 ​​레벨이라는 또 다른 매개변수가 있습니다. 0에서 9 사이의 정수입니다. 가장 낮은 값 0은 압축 없음을 나타내고 9는 최상의 압축을 나타냅니다. 압축 수준이 높을수록 압축된 바이트 개체의 길이가 커집니다.

압축 해제()

이 함수는 compress() 함수와 반대입니다. 압축되지 않은 데이터를 검색합니다. 이 함수는 히스토리 버퍼의 크기와 헤더 및 트레일러 형식의 특성을 제어하는 ​​wbits라는 선택적 매개변수를 가질 수 있습니다.

다음 문은 compress() 함수를 사용하여 문자열 개체를 압축합니다.

>>> import zlib
>>> c = zlib.compress(b'hello python')
>>> c
b'x\x9c\xcbH\xcd\xc9\xc9W(\xa8,\xc9\xc8\xcf\x03\x00\x1e\xf0\x04\xd7'

반면에 decompress() 함수는 원래 Python 문자열을 검색합니다.

>>> zlib.decompress(c)
b'hello python'

모듈은 압축 및 압축 해제 개체의 두 가지 해당 클래스의 정의로 구성됩니다.

compressobj() − 이 생성자는 데이터 스트림을 압축하는 데 사용할 압축 개체를 반환합니다. 이 개체의 두 가지 중요한 방법은

압축() - 압축된 바이트 개체를 반환합니다.

플러시() − 압축 대상은 스트림을 다루기 때문에 일부 압축된 데이터가 버퍼에 남아 있을 수 있습니다. 이 메서드는 버퍼를 비웁니다.

다음 예제는 압축 객체를 설정하고 compress() 메서드의 반환 값에 플러시된 데이터를 추가하여 압축 데이터 객체를 구성합니다.

>>> s1 = b'hello python'
>>> c = zlib.compressobj()
>>> s2 = c.compress(s1)
>>> s2 = s2+c.flush()
>>> s2
b'x\x9c\xcbH\xcd\xc9\xc9W(\xa8,\xc9\xc8\xcf\x03\x00\x1e\xf0\x04\xd7'

압축해제 obj() − 이것은 스트림에서 대용량 데이터를 압축 해제하는 압축 해제 개체의 생성자 역할을 합니다. 이 개체는 다음 메서드를 제공합니다.

압축 해제() − 이 메서드는 압축되지 않은 데이터를 반환합니다.

플러시() - 이 메서드는 버퍼를 비웁니다.

다음 코드는 이전 예제에서 만든 바이트 개체에서 압축되지 않은 데이터를 검색합니다.

>>> d = zlib.decompressobj()
>>> x = d.decompress(s2)
>>> x = x+d.flush()
>>> x
b'hello python'

zlib 모듈에는 사용 중인 zlib 라이브러리의 버전 정보를 제공하는 두 개의 상수가 정의되어 있습니다.

>>> zlib.ZLIB_VERSION
'1.2.11'
>>> zlib.ZLIB_RUNTIME_VERSION
'1.2.11'