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

Python으로 ZIP 파일 만드는 방법 – zipfile 모듈 활용 가이드

zipfile 모듈로 폴더 전체 압축하기

파이썬에서는 표준 라이브러리에 포함된 zipfile 모듈을 사용하면 별도의 외부 패키지 설치 없이도 디렉터리 전체를 zip 아카이브로 압축할 수 있습니다. 핵심은 os.walk() 함수로 디렉터리 트리를 순회하면서 하위 폴더에 있는 모든 파일을 재귀적으로 압축 파일에 추가하는 방식입니다.

예제 코드

import os
import zipfile

def zipdir(path, ziph):
    # ziph는 ZipFile 객체(핸들)입니다.
    for root, dirs, files in os.walk(path):
        for file in files:
            ziph.write(os.path.join(root, file))

zipf = zipfile.ZipFile('Zipped_file.zip', 'w', zipfile.ZIP_DEFLATED)
zipdir('./my_folder', zipf)
zipf.close()

위 코드를 실행하면 my_folder 폴더 안의 모든 파일과 하위 디렉터리 내용이 'Zipped_file.zip'이라는 하나의 압축 파일로 묶여 현재 작업 디렉터리에 저장됩니다.

코드 동작 방식 살펴보기

  • ZipFile 객체 생성: 첫 번째 인자는 생성할 zip 파일의 이름이고, 두 번째 인자 'w'는 쓰기(write) 모드를 의미합니다. 세 번째 인자 ZIP_DEFLATED는 DEFLATE 알고리즘으로 실제 압축을 수행하도록 지정하는 값입니다.
  • os.walk() 순회: 지정한 경로 아래의 모든 폴더와 파일을 재귀적으로 탐색합니다.
  • ziph.write() 호출: os.path.join()으로 결합한 파일의 전체 경로를 zip 아카이브에 하나씩 추가합니다.
  • close() 호출: 압축 작업이 끝나면 반드시 close()를 호출해야 파일 헤더가 기록되고 압축 파일이 정상적으로 완성됩니다.

참고: with 문으로 더 안전하게 작성하기

with 문을 사용하면 close()를 직접 호출하지 않아도 자동으로 리소스가 해제되므로, 실수로 닫지 않는 문제를 예방할 수 있습니다.

import os
import zipfile

with zipfile.ZipFile('Zipped_file.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
    for root, dirs, files in os.walk('./my_folder'):
        for file in files:
            zipf.write(os.path.join(root, file))

두 방법 모두 결과는 동일하지만, with 문을 활용하는 방식이 파이썬 공식 권장 스타일에 더 부합하며 코드도 간결해집니다.