매달 PC 정리하는 시간 끝! 파이썬으로 정기 점검 한 번에 자동화하기
매달 PC 정리하는 시간 끝! 파이썬으로 정기 점검 한 번에 자동화하기 (완성 코드 공개)
이 블로그에서는 지금까지 중복 파일 삭제, 폴더 용량 분석, ZIP 압축, 폴더 백업을 각각 따로 소개했습니다. 이번 글에서는 이 네 가지 작업을 하나의 스크립트로 통합해서, 실행 한 번으로 PC를 점검하고 정리하는 종합 도구를 만들어 보겠습니다. 매달 첫째 주에 한 번씩 실행하면 PC를 깨끗하게 유지할 수 있습니다.
1단계: 준비물 설치
파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다.
이번 통합 스크립트에 필요한 라이브러리를 설치합니다. 터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:
pip install pandas openpyxl
중복 탐지, 용량 분석, 압축은 파이썬 기본 내장 라이브러리(hashlib, zipfile, pathlib)로 처리하고, 결과 보고서만 pandas와 openpyxl로 엑셀에 정리합니다.
💡 이 코드로 할 수 있는 것: 지정한 폴더의 용량을 분석하고, 중복 파일을 탐지해 목록으로 정리하고, 오래된 파일을 자동 백업한 뒤, 전체 점검 결과를 하나의 엑셀 보고서로 만듭니다. 실제 파일 삭제는 사람이 직접 확인 후 진행하도록 안전하게 설계했습니다.
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단계: 실행 방법
- 코드 ① 설정의
TARGET_FOLDER에 점검할 폴더 경로를 입력합니다. BACKUP_DIR에 백업을 저장할 위치(외장 하드 권장)를 입력합니다.- 터미널에서 아래 명령어로 실행합니다:
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 입력
- 처리 순서: 용량 분석 → 중복 탐지 → 오래된 백업 정리 → 새 백업 생성 → 종합 보고서
- 안전장치: 중복 파일은 목록만 보고, 실제 삭제는 사람이 별도로 확인 후 진행
이 코드를 응용하면 여러 폴더를 동시에 점검하거나, 점검 결과를 매달 비교해서 용량 증가 추세를 추적하는 것도 가능합니다.
