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

Python으로 폴더 전체를 ZIP 파일로 압축하는 방법

Python에서는 기본 내장 모듈인 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()

코드 동작 원리

  • zipfile.ZipFile('Zipped_file.zip', 'w', zipfile.ZIP_DEFLATED): 새 ZIP 파일을 쓰기 모드('w')로 생성합니다. ZIP_DEFLATED 옵션을 지정하면 데이터가 압축되어 파일 크기가 줄어듭니다.
  • os.walk(path): 지정한 경로를 루트로 하는 모든 하위 디렉터리와 파일을 자동으로 순회합니다.
  • ziph.write(os.path.join(root, file)): 각 파일의 전체 경로를 조합해 ZIP 아카이브에 하나씩 추가합니다.
  • zipf.close(): 작업이 끝난 후 반드시 파일 핸들을 닫아야 변경 사항이 정상적으로 저장됩니다.

위 코드를 실행하면 my_folder 폴더의 전체 내용이 현재 작업 디렉터리에 Zipped_file.zip이라는 이름으로 압축되어 저장됩니다.

with 문으로 더 안전하게 처리하기

close() 호출을 잊으면 압축 파일이 손상될 수 있으므로, 파일 핸들을 자동으로 닫아주는 with 문을 사용하는 것이 좋습니다.

import os
import zipfile

def zipdir(path, ziph):
    for root, dirs, files in os.walk(path):
        for file in files:
            ziph.write(os.path.join(root, file))

with zipfile.ZipFile('Zipped_file.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
    zipdir('./my_folder', zipf)

이 방식은 코드가 간결해질 뿐만 아니라 예외가 발생하더라도 리소스가 안전하게 해제되므로, 실무에서 권장되는 패턴입니다.