PYTHON · 파일/IO
압축/아카이브
Python으로 ZIP, GZIP 등 압축 파일을 생성하고 해제합니다.
파일/IO중급zipfilegzip압축아카이브
핵심 설명
Python으로 ZIP, GZIP 등 압축 파일을 생성하고 해제합니다.
Python code
import zipfile
import gzip
import io
# ZIP 파일 생성 (메모리 내)
buffer = io.BytesIO()
with zipfile.ZipFile(buffer, "w", zipfile.ZIP_DEFLATED) as zf:
zf.writestr("hello.txt", "안녕하세요!")
zf.writestr("data/config.json", '{"key": "value"}')
print(f"ZIP 크기: {buffer.tell()} bytes")
# ZIP 파일 읽기
buffer.seek(0)
with zipfile.ZipFile(buffer, "r") as zf:
print(f"파일 목록: {zf.namelist()}")
for name in zf.namelist():
info = zf.getinfo(name)
content = zf.read(name).decode("utf-8")
print(f" {name} ({info.compress_size}b): {content[:30]}")
# GZIP 압축
original = "Hello, World! " * 100
compressed = gzip.compress(original.encode("utf-8"))
decompressed = gzip.decompress(compressed).decode("utf-8")
print(f"\n원본: {len(original)} bytes")
print(f"압축: {len(compressed)} bytes")
print(f"비율: {len(compressed)/len(original)*100:.1f}%")
print(f"복원 일치: {original == decompressed}")
# tarfile 패턴
# import tarfile
# with tarfile.open("archive.tar.gz", "w:gz") as tar:
# tar.add("src/", arcname="source")학습 팁
zipfile.ZipFile은 컨텍스트 매니저로 사용하면 자동으로 닫힙니다.
주의할 점
ZIP 파일에서 경로 탈출(path traversal) 공격에 주의하세요. extractall() 전에 파일 경로를 검증하세요.
자주 묻는 질문
압축/아카이브란 무엇인가요?
Python으로 ZIP, GZIP 등 압축 파일을 생성하고 해제합니다.
압축/아카이브 학습 시 주의할 점은 무엇인가요?
ZIP 파일에서 경로 탈출(path traversal) 공격에 주의하세요. extractall() 전에 파일 경로를 검증하세요.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.