본문 바로가기

미래 먹거리를 위하여

[파이썬 정복하기] 라이브러리 8장 - 데이터 압축하고 보관하기2 (맥OS 기준) — 파일을 압축해서 저장하기 gzip, bz2, lzma

OS: MAC

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

049. 데이터를 압축하여 파일로 저장하려면? ― gzip(지십)

- gzip: 파일 중심 (가장 일반적) / .gz 포맷은 크로스 플랫폼 표준

- 파일 크기 절감 + 전송 효율 ↑ /  텍스트 파일 백업에 최적화

- 시스템 간 데이터 교환에 유리 (특히 로그 전송, 백업 등)

- Python의 gzip 모듈은 리눅스 CLI와 완전 호환.→ 파이썬으로 압축한 .gz 파일을 터미널에서 바로 해제 가능

✔ zlib = 데이터 중심 ✔ gzip = 파일 중심, 속도 빠름

구분 설명 예시 결과
모듈명  gzip, zlib 알고리즘을 이용해
파일 단위로 압축 및 해제하는 모듈.
리눅스나 macOS에서도 .gz 확장자로 널리 사용됨.
import gzip - 로그파일, CSV, 텍스트 데이터 압축 시 자주 사용
- gzip CLI(gzip, gunzip)와 호환
파일 쓰기 (압축저장) gzip.open(filename, mode)
(오픈)mode='wt' → 텍스트 쓰기
(오픈)mode='wb' → 바이너리 쓰기
import gzip
data = "압축 테스트입니다."
with gzip.open("test.txt.gz", "wt", encoding="utf-8") as f:    test.txt.gz 파일 생성
      f.write(data)  # 텍스트 내용이 gzip 압축/저장
10
파일 읽기 (압축 해제) gzip.open(filename, mode)
(오픈)mode='rt' → 텍스트 읽기
(오픈)mode='rb' → 바이너리 읽기
with gzip.open("test.txt.gz", "rt", encoding="utf-8") as f:
       content = f.read()
print(content) # 압축이 자동해제되어 원문 복원됨
압축 테스트입니다.
메모리
압축 / 해제
파일이 아닌 바이트 데이터도 직접 처리 가능.
gzip.compress(data)
gzip.decompress(data)
data = b"Python gzip test"
c = gzip.compress(data)
d = gzip.decompress(c)
print(d)  # 출력압축 및 복원 정상 동작
b'Python gzip test' 
압축 수준 지정 compresslevel 인자로 압축률 조정
(1~9, 기본 9).
숫자 높을수록 압축률↑, 속도↓
with gzip.open("data.gz","wb", compresslevel=5) as f:
       f.write(b"data" * 1000)
# compresslevel 조절에 따라 파일 크기 차이 발생
4000
MacOS
주의사항
macOS 기본 터미널에서 gzip, gunzip 명령으로도 .gz 파일 바로 열 수 있음. bash # 터미널에서 코드 입력
gunzip test.txt.gz

출력 값 없음(정상)

# 압축 해제 후

test.txt 파일 생성됨

라이브러리 예제 문제:

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

050. bzip2 알고리즘으로 압축하려면? ― bz2(비집투)

- gzip보다 압축률 더 높지만 속도는 더 느림. 더 작은 용량으로 보관 가능
- 속도는 느려서 "백업/보관"에 적합
- CLI 명령 bzip2, bunzip2 와 호환

✔ zlib = 데이터 중심 ✔ gzip = 파일 중심, 속도 빠름 ✔ bz2 = 압축률 최고, 속도 느림

구분 설명 예시 결과
모듈명 bz2, bzip2 알고리즘을 이용해
데이터를 압축/해제하는 모듈
import bz2 고압축이 필요한 파일
보관·백업에 적합
텍스트 파일
압축 저장
bz2.open(filename, mode)
(오픈)"wt" → 텍스트 쓰기
(오픈)"wb" → 바이너리 쓰기
import bz2
data="bz2 압축 테스트입니다."
with bz2.open("test.txt.bz2","wt",encoding="utf-8") as f:
      f.write(data)
# test.txt.bz2 파일 생성텍스트 내용이
    bzip2 방식으로 압축 저장됨
14
텍스트 파일
파일 읽기
(압축 해제)
"rt" 텍스트 읽기 모드자동으로 압축 해제됨 with bz2.open("test.txt.bz2","rt",encoding="utf-8") as f:
    content=f.read()
print(content)
출력파일이 자동으로 압축 해제되어 읽힘
bz2 압축 테스트입니다. 
바이트 데이터
압축/해제
메모리 상의 데이터 직접 압축 가능:
bz2.compress(data)
bz2.decompress(data)
① d=b"Python bz2 test"*1000
    c=bz2.compress(d)
    print(len(c))  # 고압축되어 크기 줄어듦

p=bz2.decompress(c)
    print(p)   #데이터 압축 해제/복원 성공
① 84
b'Python bz2 test'
...(중략)...
b'Python bz2 test'...
문자열
.encode()
str → bytes
문자열  바이트로 압축
import bz2
data = "Python bz2 test" * 1000
print(len(data)) #15000 
# 문자열 → 바이트 → 압축
a = bz2.compress(data.encode("utf-8"))
print(len(a))
84
.decode() bytes → str
압축된 바이트  원본 문자열 복원
import bz2
b = bz2.decompress(a).decode("utf-8")
print(len(b))
15000
압축 수준
(compresslevel)
compresslevel=1~9 (기본 9)
- 1 = 가장 빠름 (압축률 낮음)
- 9 = 가장 느림 (압축률 가장 높음)
with bz2.open("a.bz2","wb",compresslevel=5) as f:  # 압축률 설정 (압축 실험)
      f.write(b"data"*5000)
 #data를 5000번 곱한 바이너리 데이터를 파일에 저장
20000
MacOS에서
해제하기 (CLI)
macOS 터미널에서도
.bz2 파일 해제 가능
bash
bunzip2 test.txt.bz2
# test.txt.bz2 → test.txt 로 해제됨
출력 값 없음(정상)

라이브러리 예제 문제:

점프 투 파이썬 - 라이브러리 예제 편 8장 50번 문제

 

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

051. LZMA 알고리즘으로 압축하려면? ― lzma(엘즈마)

- 모든 알고리즘 중 가장 높은 압축률, 가장 작은 파일 크기를 만들 수 있음
- 속도는 느림
- 대용량 데이터 백업·배포에 적합

구분 설명 예시 결과
모듈명 기반 고압축 알고리즘 사용7z 형식
(.xz) 과 동일한 방식
import lzma  
파일 압축 저장 (텍스트) lzma.open(filename, "wt")
텍스트를 .xz 파일로 압축 저장
import lzma
data="LZMA TEST"*1000
with lzma.open("data.txt.xz","wt",encoding="utf-8") as f:
      f.write(data)
# data.txt.xz 생성매우 강력한 압축 적용

9000
파일 읽기
(압축 해제)
lzma.open(filename, "rt")
자동으로 압축 해제 + 텍스트로 읽음
with lzma.open("data.txt.xz","rt",encoding="utf-8") as f:
      content=f.read()
print(len(content))
# 원본 텍스트 길이와 동일(데이터 손실 없음)
9000
메모리
압축/해제
문자열은 .encode() 필요
바이트 기반 압축 함수 제공
d=b"Python LZMA test"*5000
c=lzma.compress(d)
u=lzma.decompress(c)
print(len(c)) 강력 압축으로 크기 크게 감소
print(len(u)) # 복원은 100% 동일
164
80000
압축 수준
preset
preset=0~90 = 빠름 (압축률 낮음)
9 = 매우 느림 (압축률 최고)
lzma.open("a.xz","wb",preset=9)
# 압축률 극대화(7zip 수준)
<lzma.LZMAFile object at 0x102bc63e0>
CLI (MacOS) 압축해제 macOS에서는 xz 명령 지원 bash
xz -d data.txt.xz
data.txt.xz → data.txt 로 해제됨

라이브러리 예제 문제:

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