폴더 백업·파일 전송 끝! 파이썬으로 ZIP 파일 자동 압축·해제하기

폴더 백업·파일 전송 끝! 파이썬으로 ZIP 파일 자동 압축·해제하기 (완성 코드 공개)

파이썬으로 ZIP 파일을 자동으로 압축하고 해제하는 모습


"이번 달 업무 파일 전부 ZIP으로 묶어서 백업해두기", "거래처에서 받은 ZIP 파일 20개를 폴더별로 풀기"…

윈도우 탐색기에서 마우스 오른쪽 클릭 → 압축 → 저장 경로 지정을 파일 수만큼 반복하는 작업은 생각보다 시간이 많이 걸립니다. 파이썬을 한 번만 세팅해두면 지정한 폴더를 자동으로 ZIP으로 압축하고, 폴더 안의 ZIP 파일을 한꺼번에 해제하는 작업을 단 한 번의 실행으로 처리할 수 있습니다. 별도 라이브러리 설치도 필요 없습니다.


1단계: 준비물 확인

파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다.

이번 스크립트는 파이썬 기본 내장 라이브러리(zipfile, pathlib, shutil)만 사용합니다. 별도 설치가 필요 없습니다. 파이썬만 설치되어 있으면 바로 실행됩니다.

💡 이 코드로 할 수 있는 것: 폴더 전체를 ZIP 파일로 압축(날짜 자동 포함 파일명), 폴더 안의 ZIP 파일 전체 일괄 해제, 압축 시 파일 목록 출력, 해제 시 폴더별로 분리 저장까지 처리합니다.

2단계: 완성 코드 — 폴더 압축

아래 코드를 그대로 복사해서 메모장에 붙여넣고, zip_compress.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.

import zipfile
from pathlib import Path
from datetime import datetime

# ① 설정
SOURCE_FOLDER = r"C:\Users\내이름\Desktop\업무파일모음"   # ← 압축할 폴더 경로
OUTPUT_FOLDER = r"C:\Users\내이름\Desktop\백업"           # ← ZIP 저장 폴더 경로
ADD_DATE      = True   # ← True: 파일명에 오늘 날짜 자동 추가

# ② 출력 폴더 생성
source = Path(SOURCE_FOLDER)
output = Path(OUTPUT_FOLDER)
output.mkdir(exist_ok=True)

# ③ ZIP 파일명 결정
date_str  = f"_{datetime.now().strftime('%Y%m%d')}" if ADD_DATE else ""
zip_name  = f"{source.name}{date_str}.zip"
zip_path  = output / zip_name

# ④ 압축 실행
file_count = 0
with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zf:
    for file in sorted(source.rglob("*")):
        if file.is_file():
            arcname = file.relative_to(source.parent)   # 폴더 구조 유지
            zf.write(file, arcname)
            print(f"  ✔ 추가: {arcname}")
            file_count += 1

zip_size = round(zip_path.stat().st_size / 1024 / 1024, 2)
print(f"\n✅ 완료! {file_count}개 파일 압축 → {zip_path} ({zip_size}MB)")

3단계: 완성 코드 — ZIP 일괄 해제

폴더 안의 ZIP 파일을 모두 한꺼번에 해제하는 코드입니다. 아래 코드를 zip_extract.py로 저장하세요.

import zipfile
from pathlib import Path

# ① 설정
ZIP_FOLDER    = r"C:\Users\내이름\Desktop\ZIP모음"   # ← ZIP 파일들이 있는 폴더
OUTPUT_FOLDER = r"C:\Users\내이름\Desktop\해제결과"  # ← 해제 결과 저장 폴더
EACH_SUBFOLDER = True   # ← True: ZIP마다 별도 하위 폴더에 해제 / False: 한 폴더에 전부 해제

# ② 폴더 준비
zip_dir    = Path(ZIP_FOLDER)
output_dir = Path(OUTPUT_FOLDER)
output_dir.mkdir(exist_ok=True)

zip_files = sorted(zip_dir.glob("*.zip"))
print(f"  📂 발견된 ZIP 파일: {len(zip_files)}개")

if not zip_files:
    print("⚠ ZIP 파일을 찾을 수 없습니다. ZIP_FOLDER 경로를 확인하세요.")
else:
    success = 0
    failed  = 0

    for zip_file in zip_files:
        try:
            # ③ 해제 위치 결정
            if EACH_SUBFOLDER:
                dest = output_dir / zip_file.stem   # ZIP 파일명으로 하위 폴더 생성
            else:
                dest = output_dir
            dest.mkdir(exist_ok=True)

            # ④ 해제 실행
            with zipfile.ZipFile(zip_file, "r") as zf:
                zf.extractall(dest)
                file_count = len(zf.namelist())
            print(f"  ✔ {zip_file.name} → {dest.name}/ ({file_count}개 파일)")
            success += 1

        except zipfile.BadZipFile:
            print(f"  ✘ {zip_file.name}: 손상된 ZIP 파일, 건너뜀")
            failed += 1
        except Exception as e:
            print(f"  ✘ {zip_file.name}: {e}")
            failed += 1

    print(f"\n✅ 완료! 성공: {success}개 / 실패: {failed}개 → {OUTPUT_FOLDER}")

4단계: 실행 방법

압축할 때

  1. 코드 ① 설정의 SOURCE_FOLDER에 압축할 폴더 경로를 입력합니다.
  2. OUTPUT_FOLDER에 ZIP 파일을 저장할 경로를 입력합니다.
  3. 터미널에서 실행합니다:
python zip_compress.py

해제할 때

  1. 코드 ① 설정의 ZIP_FOLDER에 ZIP 파일들이 있는 폴더 경로를 입력합니다.
  2. OUTPUT_FOLDER에 해제 결과를 저장할 경로를 입력합니다.
  3. 터미널에서 실행합니다:
python zip_extract.py

압축 정상 실행 시 터미널에 이렇게 출력됩니다:

  ✔ 추가: 업무파일모음\1월_보고서.xlsx
  ✔ 추가: 업무파일모음\2월_보고서.xlsx
  ✔ 추가: 업무파일모음\계약서\A사_계약서.pdf
  ✔ 추가: 업무파일모음\계약서\B사_계약서.pdf

✅ 완료! 4개 파일 압축 → C:\Users\내이름\Desktop\백업\업무파일모음_20260529.zip (2.34MB)

5단계: 자주 발생하는 오류와 해결법

오류 1: FileNotFoundError

SOURCE_FOLDER 또는 ZIP_FOLDER에 입력한 경로가 존재하지 않는 경우입니다. 경로 앞에 r을 붙였는지 확인하고(r"C:\..." 형태), 윈도우 탐색기에서 해당 폴더가 실제로 있는지 확인하세요.

오류 2: 압축 파일을 열었을 때 한글 파일명이 깨짐

윈도우 기본 압축 해제 도구에서 한글이 깨지는 경우가 있습니다. 이 코드로 만든 ZIP은 UTF-8 인코딩을 사용하므로 반디집 또는 7-Zip으로 열면 한글 파일명이 정상적으로 표시됩니다.

오류 3: BadZipFile

ZIP 파일이 전송 중 손상되었거나, 확장자만 .zip이고 실제로는 다른 형식인 파일입니다. 해당 파일은 건너뛰고 나머지 파일은 계속 처리하도록 코드에 예외 처리가 이미 포함되어 있습니다.


응용: 매달 자동으로 백업하고 싶다면

윈도우 작업 스케줄러와 결합하면 매달 말일에 자동으로 폴더를 압축 백업할 수 있습니다. 작업 스케줄러 설정 방법은 이전 게시글 주식·환율 자동 수집 편을 참고하세요.

백업 후 오래된 ZIP 파일을 자동으로 정리하고 싶다면 압축 코드 아래에 아래 코드를 추가하세요. 30일이 지난 백업 파일을 자동으로 삭제합니다.

import time

KEEP_DAYS = 30   # ← 보관할 기간 (일 단위)

for old_zip in output.glob("*.zip"):
    age_days = (time.time() - old_zip.stat().st_mtime) / 86400
    if age_days > KEEP_DAYS:
        old_zip.unlink()
        print(f"  🗑 오래된 백업 삭제: {old_zip.name} ({int(age_days)}일 경과)")
💡 이전 게시글과 결합하면: 중복 파일 자동 삭제 편으로 먼저 중복을 제거하고, 이 스크립트로 정리된 폴더를 압축 백업하면 더욱 깔끔한 파일 관리가 됩니다.

핵심 요약

  • 준비물: Python만 설치하면 됩니다. 별도 라이브러리 설치 불필요
  • 압축: zip_compress.py — 폴더 구조 유지, 날짜 자동 포함 파일명으로 저장
  • 해제: zip_extract.py — ZIP마다 별도 폴더에 해제, 손상 파일 자동 건너뜀
  • 결과: 파일 수·크기 출력, 성공/실패 건수 확인 가능

이 코드를 응용하면 ZIP 안의 특정 확장자 파일만 골라 해제하거나, 압축 파일에 비밀번호를 설정하는 것도 가능합니다.

이 블로그의 인기 게시물

카카오톡 용량 줄이기! 대화방 파일 삭제로 스마트폰 용량 확보법 (1분 해결)

느려진 구글 크롬 속도 2배 빨라지는 3가지 설정 방법 (2026년 최신 가이드)

업무 속도 3배 빨라지는 윈도우 기본 캡처 도구 단축키 및 200% 활용 꿀팁