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

Python으로 디렉토리 전체를 ZIP 파일로 압축하는 방법

파이썬에서 디렉토리를 ZIP 아카이브로 압축하려면 표준 라이브러리의 zipfile 모듈을 사용하면 됩니다. 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이라는 파일로 압축되어 현재 작업 디렉토리에 저장됩니다.

코드 설명

  • os.walk(path): 지정한 경로의 루트 폴더, 하위 폴더 목록, 파일 목록을 순차적으로 반환합니다.
  • zipfile.ZIP_DEFLATED: DEFLATE 알고리즘으로 압축하여 파일 크기를 줄입니다. 압축 없이 저장하려면 ZIP_STORED를 사용할 수 있습니다.
  • os.path.join(root, file): 운영체제에 맞게 경로 구분자를 자동으로 처리해 줍니다.

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)

with 문을 사용하면 코드 블록이 끝나는 시점에 ZIP 파일이 자동으로 닫히므로, 리소스 누수나 손상된 아카이브 문제를 예방할 수 있습니다.