PHpullh
학습 라이브러리/Python/압축/아카이브

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 메타데이터를 가집니다.