본문 바로가기

미래 먹거리를 위하여

[파이썬 정복하기] 라이브러리 8장 - 데이터 압축하고 보관하기1 (맥OS 기준) — 데이터 압축의 기본 zlib

OS: MAC

참고: 👉 점프 투 파이썬 - 라이브러리 예제 바로가기

048. 데이터 크기를 줄여 전송하려면? ― zlib(지립)

 

  • zlib = 데이터(바이트) 압축의 기본기(데이터 단위 압축)
  • 속도 빠름 / 압축률 중간 / 가벼움/ API 전송/ 메모리 저장용
구분 설명 예시 결과
모듈명 파이썬 내장 압축 모듈로,
DEFLATE 알고리즘을 사용해 데이터를 압축·해제함.
파일이 아닌 메모리 상의 바이트 데이터 압축에 주로 사용됨.
import zlib - 네트워크 전송 전 데이터 크기 축소
- 메모리 캐싱 시 공간 절약
데이터
압축
zlib.compress(data [, level])
데이터(바이트형)를 압축.

level은 1~9로 압축 정도 설정 가능
(기본 6)
import zlib
data = b"Python data compression" * 10
    print(len(data)) # 원본 크기
 c = zlib.compress(data)
    print(len(c)) # 데이터 압축 크기
① 230
34
데이터
해제(복원)
zlib.decompress(data)
압축된 데이터를 원래 상태로 되돌림.
import zlib
d = zlib.decompress(c)
print(d[:25])
b'Python data compressionPy'
압축 수준 지정 compress(data, level)
level=1 → 빠름 (압축률 낮음)
level=9 → 느림 (압축률 높음)
for lv in [1, 6, 9]:
    c = zlib.compress(data, lv)
    print(lv, len(c))
1 34
6 34
9 34
ex) 압축률 비교:
9 → 34 bytes
체크섬
계산
전송 중 손상 여부를 확인하기 위한 검증값 생성.
crc32(data) / adler32(data) 사용
zlib.crc32(b"data") # 2918445923
zlib.adler32(b"data") # 67109275
CRC32: 32비트 정수 반환 (느리지만 정확)
Adler32: 빠르지만 단순 검증용
파일로
저장하기
zlib은 파일 입출력 기능이 없으므로
open()으로 직접 처리함.
# 압축해서 파일로 저장
with open("data.zlib","wb") as f:
       f.write(zlib.compress(data))
# 압축 해제 후 읽기
with open("data.zlib","rb") as f:
       print(zlib.decompress(f.read()))
b'Python...compression'
(data.zlib 파일 생성 및 복원 성공출력)
MacOS
주의사항
macOS 터미널 zlib 포맷 직접 해제 불가.
→ 반드시 파이썬 코드로만 압축/해제.
(CLI에서 gunzip data.zlib 실행 시 오류) zlib은 gzip, zip과 달리 헤더 정보 없음.
파이썬 전용 포맷

라이브러리 예제 문제: 

점프 투 파이썬 - 라이브러리 예제 편 8장 48번 문제
점프 투 파이썬 - 라이브러리 예제 편 8장 48번 문제 풀이 및 결과