openpyxl, pandas, xlwings 뭐가 다를까? 파이썬 엑셀 라이브러리 3종 비교

이미지
openpyxl, pandas, xlwings 뭐가 다를까? 파이썬 엑셀 라이브러리 3종 비교 이 블로그에서 엑셀 자동화 글을 30편 가까이 쓰면서 openpyxl 과 pandas 를 상황에 따라 섞어 사용했습니다. "왜 어떤 글은 openpyxl을 쓰고 어떤 글은 pandas를 쓰는지" 궁금하셨던 분들이 계실 것 같아, 이번에는 완성 코드를 공개하는 대신 세 라이브러리의 차이를 직접 비교해 정리해보려 합니다. 파이썬으로 엑셀을 처음 다뤄보는 분이라면 이 글 하나로 어떤 도구를 배워야 할지 방향을 잡을 수 있을 것입니다. 세 라이브러리, 한 줄 요약 먼저 각각이 무엇을 위해 만들어졌는지부터 명확히 하고 시작하겠습니다. openpyxl → 엑셀 파일을 "직접 읽고 쓰는" 라이브러리. 셀 하나하나를 세밀하게 제어. pandas → 엑셀을 "데이터 표"로 취급해서 분석·가공하는 라이브러리. 통계·집계에 최적화. xlwings → 설치된 엑셀 프로그램 자체를 "리모컨처럼" 조작하는 라이브러리. 실시간 연동. 셋 다 "파이썬으로 엑셀을 다룬다"는 목적은 같지만, 접근 방식이 완전히 다릅니다. 아래에서 같은 작업을 세 가지 방식으로 각각 구현해보면 차이가 명확해집니다. 비교 1 — 셀에 값 쓰고 서식 적용하기 가장 기본적인 "A1 셀에 제목을 쓰고 굵게 표시하기" 작업을 세 라이브러리로 각각 구현하면 이렇게 다릅니다. openpyxl (가장 세밀한 제어) from openpyxl import Workbook from openpyxl.styles import Font wb = Workbook() ws = wb.active ws["A1"] = "월간 매출 보고서" ws["A1"].font = Font(bold=True, size=14, color="2E509...

PC 용량 확보! 파이썬으로 중복 파일 자동으로 찾아 삭제하기

PC 용량 확보! 파이썬으로 중복 파일 자동으로 찾아 삭제하기 (완성 코드 공개)

파이썬으로 중복 파일을 자동으로 찾아서 삭제하는 모습


"보고서_최종.docx", "보고서_최종_진짜최종.docx", "보고서_최종_수정본.docx"…

이름은 다르지만 내용이 똑같은 파일, 같은 사진을 여러 폴더에 나눠 저장해 놓은 파일, 다운로드 폴더에 같은 파일을 두 번 내려받은 파일… 이런 중복 파일이 쌓이다 보면 어느 순간 PC 용량이 꽉 차버립니다. 파일명이 달라도 내용이 같은 파일을 눈으로 직접 찾는 것은 사실상 불가능합니다. 파이썬을 한 번만 세팅해두면 폴더 안의 중복 파일을 자동으로 찾아내 목록으로 정리하고 안전하게 삭제할 수 있습니다.


1단계: 준비물 설치

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

중복 파일 탐지에는 파이썬 기본 내장 라이브러리만 사용하지만, 결과를 엑셀로 저장하기 위해 아래 라이브러리를 추가로 설치합니다.

pip install pandas openpyxl
💡 중복 판단 기준: 파일명이 달라도 내용이 같으면 중복으로 판단합니다. 파일 내용을 해시(Hash) 값으로 변환해서 비교하기 때문에 파일명, 날짜와 관계없이 바이트 단위로 정확하게 일치하는 파일만 중복으로 처리합니다. 비슷한 파일이 아니라 완전히 동일한 파일만 잡아냅니다.

2단계: 완성 코드

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

import hashlib
import pandas as pd
from pathlib import Path
from collections import defaultdict

# ① 설정
FOLDER_PATH  = r"C:\Users\내이름\Desktop\정리할폴더"  # ← 탐색할 폴더 경로
REPORT_PATH  = r"C:\Users\내이름\Desktop\중복파일_목록.xlsx"  # ← 결과 엑셀 저장 경로
AUTO_DELETE  = False   # ← True로 바꾸면 중복 파일 자동 삭제 (원본 1개는 보존)
SCAN_SUBDIR  = True    # ← True: 하위 폴더까지 탐색 / False: 현재 폴더만 탐색

# ② 파일 해시 계산 함수
def get_hash(filepath):
    h = hashlib.md5()
    with open(filepath, "rb") as f:
        while chunk := f.read(8192):
            h.update(chunk)
    return h.hexdigest()

# ③ 폴더 탐색 및 해시 비교
folder  = Path(FOLDER_PATH)
pattern = "**/*" if SCAN_SUBDIR else "*"
hash_map = defaultdict(list)

print("  📂 파일 탐색 중...")
for file in folder.glob(pattern):
    if file.is_file():
        try:
            file_hash = get_hash(file)
            hash_map[file_hash].append(file)
        except Exception as e:
            print(f"  ✘ 읽기 실패: {file.name} → {e}")

# ④ 중복 파일 목록 정리
duplicates = {h: files for h, files in hash_map.items() if len(files) > 1}
print(f"  ✔ 탐색 완료: 중복 그룹 {len(duplicates)}개 발견")

if not duplicates:
    print("\n✅ 중복 파일이 없습니다. 폴더가 깨끗합니다!")
else:
    rows = []
    delete_targets = []

    for file_hash, files in duplicates.items():
        # 가장 오래된 파일(생성일 기준)을 원본으로 보존
        files_sorted = sorted(files, key=lambda f: f.stat().st_ctime)
        for i, f in enumerate(files_sorted):
            role = "✅ 보존 (원본)" if i == 0 else "🗑 삭제 대상"
            rows.append({
                "구분":      role,
                "파일명":    f.name,
                "경로":      str(f.parent),
                "크기(KB)":  round(f.stat().st_size / 1024, 1),
                "해시값":    file_hash,
            })
            if i > 0:
                delete_targets.append(f)

    # ⑤ 엑셀 보고서 저장
    df = pd.DataFrame(rows)
    df.to_excel(REPORT_PATH, index=False)
    print(f"  ✔ 중복 목록 저장 완료 → {REPORT_PATH}")

    # ⑥ 자동 삭제 (AUTO_DELETE = True인 경우만 실행)
    if AUTO_DELETE:
        deleted = 0
        for target in delete_targets:
            try:
                target.unlink()
                print(f"  🗑 삭제: {target.name}")
                deleted += 1
            except Exception as e:
                print(f"  ✘ 삭제 실패: {target.name} → {e}")
        print(f"\n✅ 완료! 중복 파일 {deleted}개 삭제, 원본 보존")
    else:
        print(f"\n✅ 탐색 완료! 삭제 대상 {len(delete_targets)}개")
        print(f"   엑셀 목록을 확인 후 AUTO_DELETE = True로 변경하면 자동 삭제됩니다.")

3단계: 실행 방법 (2단계 안전 프로세스)

중복 파일 삭제는 되돌리기 어렵기 때문에 반드시 2단계로 나눠서 진행합니다.

  1. 코드 ① 설정의 FOLDER_PATH에 정리할 폴더 경로를 입력합니다.
  2. AUTO_DELETE = False 상태로 먼저 실행합니다. 삭제 없이 탐색만 합니다.
python find_duplicates.py

실행 후 생성된 엑셀 파일을 열어 "✅ 보존 (원본)""🗑 삭제 대상" 목록을 꼼꼼히 확인합니다.

  1. 목록을 확인하고 문제가 없으면 코드의 AUTO_DELETE = FalseAUTO_DELETE = True로 변경한 뒤 다시 실행합니다.

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

  📂 파일 탐색 중...
  ✔ 탐색 완료: 중복 그룹 5개 발견
  ✔ 중복 목록 저장 완료 → C:\Users\내이름\Desktop\중복파일_목록.xlsx
  🗑 삭제: 보고서_최종_수정본.docx
  🗑 삭제: 보고서_최종_진짜최종.docx
  🗑 삭제: IMG_20260501(1).jpg
  🗑 삭제: 발표자료_복사본.pptx

✅ 완료! 중복 파일 4개 삭제, 원본 보존

각 중복 그룹에서 가장 먼저 만들어진 파일(원본)은 반드시 보존하고 나머지만 삭제합니다.


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

오류 1: PermissionError

삭제하려는 파일이 현재 다른 프로그램에서 열려 있거나, 시스템 보호 파일인 경우 발생합니다. 해당 파일을 사용 중인 프로그램을 먼저 닫은 후 다시 실행하세요. 시스템 폴더(C:\Windows 등)는 탐색 대상에서 제외하는 것을 권장합니다.

오류 2: 탐색 시간이 너무 오래 걸림

파일 수가 수만 개 이상이거나 대용량 파일이 많은 경우 해시 계산에 시간이 걸립니다. SCAN_SUBDIR = False로 변경해 현재 폴더만 먼저 탐색하고, 하위 폴더를 나눠서 진행하세요.

오류 3: 삭제했는데 용량이 줄지 않음

파이썬의 unlink()는 파일을 영구 삭제합니다. 그런데 윈도우 탐색기에서 용량이 즉시 반영되지 않을 수 있습니다. 탐색기를 새로 고침(F5)하거나 PC를 재시작하면 정확한 용량이 표시됩니다.


응용: 특정 확장자만 골라서 탐색하고 싶다면

이미지 파일만, 또는 문서 파일만 골라서 중복을 탐색하고 싶다면 코드 ③ 탐색 부분에 확장자 필터를 추가하세요.

EXTENSIONS = {".jpg", ".jpeg", ".png", ".gif"}   # ← 탐색할 확장자 목록

for file in folder.glob(pattern):
    if file.is_file() and file.suffix.lower() in EXTENSIONS:   # 확장자 필터 추가
        try:
            file_hash = get_hash(file)
            hash_map[file_hash].append(file)
💡 이전 게시글과 결합하면: 파일 키워드 자동 분류 편으로 먼저 파일을 폴더별로 정리한 뒤, 이 스크립트로 중복 파일을 제거하면 PC를 깔끔하게 정리할 수 있습니다.

핵심 요약

  • 준비물: Python + pandas + openpyxl 설치 (pip install pandas openpyxl)
  • 설정: FOLDER_PATH(탐색 폴더)와 REPORT_PATH(결과 저장 경로)만 수정
  • 실행 순서: AUTO_DELETE = False로 목록 확인 → 확인 후 AUTO_DELETE = True로 삭제
  • 결과: 파일명과 무관하게 내용 기준으로 중복 탐지, 원본 보존 후 나머지만 삭제

이 코드를 응용하면 네트워크 드라이브나 외장 하드까지 범위를 넓혀 탐색하는 것도 가능합니다.

이 블로그의 인기 게시물

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

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

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