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 파일 생성됨 |
라이브러리 예제 문제:


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 로 해제됨 |
출력 값 없음(정상) |
라이브러리 예제 문제:


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 로 해제됨 |
라이브러리 예제 문제:

