매달 PC 정리하는 시간 끝! 파이썬으로 정기 점검 한 번에 자동화하기

매달 PC 정리하는 시간 끝! 파이썬으로 정기 점검 한 번에 자동화하기 (완성 코드 공개)

파이썬으로 PC 정기 점검과 정리 작업을 한 번에 자동화하는 모습


이 블로그에서는 지금까지 중복 파일 삭제, 폴더 용량 분석, ZIP 압축, 폴더 백업을 각각 따로 소개했습니다. 이번 글에서는 이 네 가지 작업을 하나의 스크립트로 통합해서, 실행 한 번으로 PC를 점검하고 정리하는 종합 도구를 만들어 보겠습니다. 매달 첫째 주에 한 번씩 실행하면 PC를 깨끗하게 유지할 수 있습니다.


1단계: 준비물 설치

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

이번 통합 스크립트에 필요한 라이브러리를 설치합니다. 터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:

pip install pandas openpyxl

중복 탐지, 용량 분석, 압축은 파이썬 기본 내장 라이브러리(hashlib, zipfile, pathlib)로 처리하고, 결과 보고서만 pandasopenpyxl로 엑셀에 정리합니다.

💡 이 코드로 할 수 있는 것: 지정한 폴더의 용량을 분석하고, 중복 파일을 탐지해 목록으로 정리하고, 오래된 파일을 자동 백업한 뒤, 전체 점검 결과를 하나의 엑셀 보고서로 만듭니다. 실제 파일 삭제는 사람이 직접 확인 후 진행하도록 안전하게 설계했습니다.

2단계: 완성 코드

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

import hashlib
import zipfile
import shutil
import time
from pathlib import Path
from datetime import datetime
from collections import defaultdict
import pandas as pd

# ① 설정
TARGET_FOLDER = r"C:\Users\내이름\Desktop\정리대상"        # ← 점검할 폴더
BACKUP_DIR    = r"D:\월간백업"                              # ← 백업 저장 위치
REPORT_PATH   = r"C:\Users\내이름\Desktop\PC점검_보고서.xlsx"
KEEP_BACKUP_DAYS = 90   # ← 백업 보관 기간

report_data = {}

# ② 1단계: 폴더 용량 분석
print("="*50)
print("📊 1단계: 폴더 용량 분석")
print("="*50)

def get_folder_size(path):
    total = 0
    for item in path.rglob("*"):
        if item.is_file():
            try:
                total += item.stat().st_size
            except (PermissionError, OSError):
                pass
    return total

target = Path(TARGET_FOLDER)
size_results = []
for folder in [f for f in target.iterdir() if f.is_dir()]:
    size_mb = round(get_folder_size(folder) / 1024 / 1024, 1)
    size_results.append({"폴더명": folder.name, "용량(MB)": size_mb})
    print(f"  ✔ {folder.name}: {size_mb}MB")

report_data["용량분석"] = pd.DataFrame(size_results).sort_values("용량(MB)", ascending=False)

# ③ 2단계: 중복 파일 탐지
print("\n" + "="*50)
print("🔍 2단계: 중복 파일 탐지")
print("="*50)

def get_hash(filepath):
    h = hashlib.md5()
    with open(filepath, "rb") as f:
        while chunk := f.read(8192):
            h.update(chunk)
    return h.hexdigest()

hash_map = defaultdict(list)
for file in target.rglob("*"):
    if file.is_file():
        try:
            hash_map[get_hash(file)].append(file)
        except Exception:
            pass

duplicate_rows = []
for file_hash, files in hash_map.items():
    if len(files) > 1:
        for f in files:
            duplicate_rows.append({"파일명": f.name, "경로": str(f.parent),
                                   "크기(KB)": round(f.stat().st_size/1024, 1)})

print(f"  ✔ 중복 그룹 발견: {sum(1 for f in hash_map.values() if len(f)>1)}개")
report_data["중복파일"] = pd.DataFrame(duplicate_rows) if duplicate_rows else pd.DataFrame()

# ④ 3단계: 90일 이상 지난 백업 자동 정리
print("\n" + "="*50)
print("🗑 3단계: 오래된 백업 정리")
print("="*50)

backup_dir = Path(BACKUP_DIR)
backup_dir.mkdir(parents=True, exist_ok=True)
deleted_count = 0

for old_file in backup_dir.glob("*.zip"):
    age_days = (time.time() - old_file.stat().st_mtime) / 86400
    if age_days > KEEP_BACKUP_DAYS:
        old_file.unlink()
        print(f"  🗑 삭제: {old_file.name} ({int(age_days)}일 경과)")
        deleted_count += 1

print(f"  ✔ 정리 완료: {deleted_count}개 삭제")

# ⑤ 4단계: 전체 폴더 압축 백업
print("\n" + "="*50)
print("💾 4단계: 압축 백업 생성")
print("="*50)

date_str = datetime.now().strftime("%Y%m%d")
zip_path = backup_dir / f"{target.name}_{date_str}.zip"
file_count = 0

with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zf:
    for file in target.rglob("*"):
        if file.is_file():
            zf.write(file, file.relative_to(target.parent))
            file_count += 1

zip_size_mb = round(zip_path.stat().st_size / 1024 / 1024, 1)
print(f"  ✔ 백업 완료: {file_count}개 파일, {zip_size_mb}MB → {zip_path.name}")

# ⑥ 종합 보고서 저장
print("\n" + "="*50)
print("📝 종합 보고서 작성 중...")
print("="*50)

summary = pd.DataFrame([{
    "점검일시": datetime.now().strftime("%Y-%m-%d %H:%M"),
    "분석폴더": str(target),
    "전체용량(MB)": report_data["용량분석"]["용량(MB)"].sum(),
    "중복파일그룹": sum(1 for f in hash_map.values() if len(f) > 1),
    "백업파일": zip_path.name,
    "백업크기(MB)": zip_size_mb,
    "정리된오래된백업": deleted_count,
}])

with pd.ExcelWriter(REPORT_PATH, engine="openpyxl") as writer:
    summary.to_excel(writer, sheet_name="종합요약", index=False)
    report_data["용량분석"].to_excel(writer, sheet_name="폴더별용량", index=False)
    if not report_data["중복파일"].empty:
        report_data["중복파일"].to_excel(writer, sheet_name="중복파일목록", index=False)

print(f"  ✔ 보고서 저장 완료 → {REPORT_PATH}")
print(f"\n✅ 전체 점검 완료!")

3단계: 실행 방법

  1. 코드 ① 설정의 TARGET_FOLDER에 점검할 폴더 경로를 입력합니다.
  2. BACKUP_DIR에 백업을 저장할 위치(외장 하드 권장)를 입력합니다.
  3. 터미널에서 아래 명령어로 실행합니다:
python pc_checkup.py

정상 실행 시 터미널에 4단계 작업이 순서대로 출력됩니다:

==================================================
📊 1단계: 폴더 용량 분석
==================================================
  ✔ 다운로드: 8420.3MB
  ✔ 문서: 1240.5MB

==================================================
🔍 2단계: 중복 파일 탐지
==================================================
  ✔ 중복 그룹 발견: 3개

==================================================
🗑 3단계: 오래된 백업 정리
==================================================
  🗑 삭제: 정리대상_20260201.zip (95일 경과)
  ✔ 정리 완료: 1개 삭제

==================================================
💾 4단계: 압축 백업 생성
==================================================
  ✔ 백업 완료: 1248개 파일, 2150.8MB → 정리대상_20260629.zip

==================================================
📝 종합 보고서 작성 중...
==================================================
  ✔ 보고서 저장 완료 → C:\Users\내이름\Desktop\PC점검_보고서.xlsx

✅ 전체 점검 완료!

완성된 엑셀 보고서에는 종합요약, 폴더별용량, 중복파일목록 3개 시트가 들어 있어 한눈에 PC 상태를 파악할 수 있습니다.


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

오류 1: 전체 실행 시간이 너무 오래 걸림

용량 분석과 중복 탐지를 같은 폴더에서 두 번 스캔하기 때문에 파일이 많으면 시간이 걸립니다. 자주 점검하지 않는 폴더라면 새벽 시간에 스케줄러 편으로 예약 실행하는 것을 권장합니다.

오류 2: 백업 드라이브 연결이 끊겨 4단계에서 오류 발생

BACKUP_DIR이 외장 하드 경로인데 연결이 끊긴 경우입니다. 코드 시작 부분에 아래 확인 코드를 추가하세요:

if not Path(BACKUP_DIR).exists():
    print("⚠ 백업 드라이브가 연결되어 있지 않습니다. 연결 후 다시 실행하세요.")
    exit()

오류 3: 중복 파일이 보고서에는 있는데 삭제는 안 됨

의도된 동작입니다. 이 통합 스크립트는 안전을 위해 중복 파일을 자동 삭제하지 않고 목록만 보고서에 남깁니다. 실제 삭제가 필요하면 중복 파일 자동 삭제 편의 코드로 보고서를 확인한 뒤 별도로 진행하세요.


응용: 매달 자동으로 실행되게 예약하기

윈도우 작업 스케줄러로 매달 1일 새벽에 자동 실행되게 설정하면 사람이 신경 쓰지 않아도 PC가 자동으로 점검·정리됩니다. 작업 스케줄러 설정 방법은 스케줄러 완전 정복 편을 참고하세요.

💡 알림까지 받고 싶다면: 텔레그램 자동 발송 편의 코드를 마지막 줄에 추가하면 점검이 끝날 때마다 결과 요약을 텔레그램으로 받을 수 있습니다.

핵심 요약

  • 준비물: Python + pandas + openpyxl 설치 (pip install pandas openpyxl)
  • 설정: TARGET_FOLDER, BACKUP_DIR, KEEP_BACKUP_DAYS 수정
  • 실행: 터미널에서 python pc_checkup.py 입력
  • 처리 순서: 용량 분석 → 중복 탐지 → 오래된 백업 정리 → 새 백업 생성 → 종합 보고서
  • 안전장치: 중복 파일은 목록만 보고, 실제 삭제는 사람이 별도로 확인 후 진행

이 코드를 응용하면 여러 폴더를 동시에 점검하거나, 점검 결과를 매달 비교해서 용량 증가 추세를 추적하는 것도 가능합니다.