Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 큰 파일 압축하기 – zipfile 모듈 완벽 가이드

Python은 표준 라이브러리만으로도 파일을 손쉽게 압축하거나 압축 해제할 수 있는 강력한 기능을 제공합니다. 그 핵심이 바로 zipfile 모듈입니다. 이 모듈을 사용하면 단일 파일뿐 아니라 여러 개의 파일을 한 번에 ZIP 형식으로 묶거나 풀어낼 수 있으며, 코드 양도 몇 줄에 불과해 초보자도 부담 없이 활용할 수 있습니다.

zipfile 모듈로 파일 압축하기

압축 작업의 기본 흐름은 다음과 같습니다. 먼저 zipfile 모듈을 임포트한 뒤, ZipFile 객체를 쓰기 모드('w')로 엽니다. 이때 두 번째 매개변수에 'w'를 지정하면 새로운 ZIP 아카이브를 생성할 수 있습니다. 압축하려는 파일이 코드 파일과 같은 폴더에 있다면 파일 이름만 적으면 되고, 다른 위치에 있다면 해당 파일의 전체 경로를 지정하면 됩니다.

import zipfile

foo_zip = zipfile.ZipFile('foo.zip', 'w')
foo_zip.write('foo.txt', compress_type=zipfile.ZIP_DEFLATED)
foo_zip.close()

위 코드를 실행하면 foo.txt 파일이 압축되어 foo.zip이라는 ZIP 아카이브가 생성됩니다.

압축 방식(Compression Type) 이해하기

코드에서 사용된 compress_type=zipfile.ZIP_DEFLATED는 실제 데이터 압축을 수행하는 옵션입니다. 참고로 주요 압축 방식은 다음과 같습니다.

  • ZIP_DEFLATED: DEFLATE 알고리즘으로 실제 압축을 수행합니다. 용량 절감 효과가 가장 큽니다.
  • ZIP_STORED: 압축 없이 파일을 그대로 저장합니다. 아카이브 묶기만 필요할 때 유용합니다.

만약 ZIP_DEFLATED 옵션을 생략하면 기본값인 저장 모드(STORED)로 동작하여 파일 크기가 줄어들지 않으므로, 실질적인 압축을 원한다면 반드시 이 옵션을 지정해야 합니다.

여러 파일을 한 번에 압축하는 방법

대용량 작업에서는 여러 파일을 하나의 ZIP으로 묶는 경우가 많습니다. 아래와 같이 반복문을 활용하면 간단하게 처리할 수 있습니다.

import zipfile

files = ['file1.txt', 'file2.txt', 'file3.txt']

with zipfile.ZipFile('archive.zip', 'w') as zf:
    for f in files:
        zf.write(f, compress_type=zipfile.ZIP_DEFLATED)

with 문으로 안전하게 리소스 관리하기

위 예시처럼 with 문을 사용하면 블록이 끝날 때 자동으로 close()가 호출되어, 파일 핸들을 닫지 않아 발생할 수 있는 오류나 리소스 누수를 예방할 수 있습니다. 특히 큰 파일을 다룰 때는 안전성 측면에서 with 문 사용을 권장합니다.

마무리

Python의 zipfile 모듈은 외부 라이브러리 설치 없이 표준 라이브러리만으로 파일 압축과 해제를 모두 처리할 수 있는 실용적인 도구입니다. 몇 줄의 코드로 백업 파일 생성, 로그 압축, 대용량 데이터 전송 준비 등 다양한 작업을 자동화할 수 있으니, 프로젝트에 적극적으로 활용해 보시기 바랍니다.