memostack
article thumbnail
Published 2020. 3. 10. 10:50
zipfile 모듈로 압축하기 Language/Python
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형
zipfile 모듈은 Python 3.3 이상부터 지원해준다.

파일 압축

본 예제에서는 디렉토리와 그 하위 모든 파일들을 압축하고 있다.

src_path = r"압축하고 싶은 디렉토리 경로"
base_path, dir_name = os.path.split(src_path)
trg_zip_name = dir_name + ".zip"

cur_path = os.getcwd()

# 현재 디렉토리 경로 변경
os.chdir(base_path)
try:
    with zipfile.ZipFile(trg_zip_name, "w", zipfile.ZIP_DEFLATED) as f:
        for base_dir, dirs, files in os.walk(src_path):
            for file in files:
                # 상대 경로를 구한다.
                _relpath = os.path.relpath(os.path.join(base_dir, file), base_path)
                f.write(_relpath)
finally:
    # 원래 디렉토리 위치로 변경
    os.chdir(cur_path)
DEFLATE: ZIP, gzip 등의 프로그램에서 사용되는 무손실 압축 데이터 포맷이자 알고리즘이다.
https://ko.wikipedia.org/wiki/DEFLATE

 

주의

코드 중간에 현재 디렉토리 위치 변경하고 상대경로를 구하는 부분이 있는데, 이처럼 안하면 압축했을때 이상한 구조로 압축파일이 생성된다.

 

예를 들어 경로가 아래와 같을 때,

  • 대상 경로: C:\dev\pdf\target
  • 압축 후 경로: C:\dev\pdf\target.zip

절대 경로로 했을 경우

  • 압축 내부 디렉토리 구조 dev/pdf/target/*

상대 경로로 했을 경우

  • 압축 내부 디렉토리 구조 target/*
반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!