중복 파일 삭제 스크립트를 돌렸다가 식은땀 흘린 날

이미지
중복 파일 삭제 스크립트를 돌렸다가 식은땀 흘린 날 이 블로그의 중복 파일 자동 삭제 편 과 파일명 일괄 변경 편 을 보면 공통적으로 "DRY_RUN"이라는 안전장치가 들어 있습니다. 실제 삭제나 변경 전에 미리보기부터 하도록 만든 이 습관은, 사실 처음부터 있던 게 아니라 한 번의 아찔한 경험 뒤에 생긴 것입니다. 당시 상황은 이랬습니다. 다운로드 폴더가 오래 방치되어 있어 용량을 확인해보니 중복 파일이 상당히 많았고, "파일 해시값을 비교해서 중복이면 자동으로 지우는" 스크립트를 처음 짜서 바로 실행했습니다. 사건 발생 — 실행 버튼을 누른 직후 처음 짠 코드는 대략 이런 형태였습니다. import hashlib from pathlib import Path from collections import defaultdict folder = Path(r"C:\Users\내이름\Downloads") hash_map = defaultdict(list) def get_hash(filepath): h = hashlib.md5() with open(filepath, "rb") as f: h.update(f.read()) return h.hexdigest() for file in folder.rglob("*"): if file.is_file(): hash_map[get_hash(file)].append(file) # 중복이면 첫 번째만 남기고 나머지 삭제 for files in hash_map.values(): if len(files) > 1: for f in files[1:]: f.unlink() # ← 바로 삭제 실행 print(f"삭제: {f.name}") 실행하자마자 터미널에 "삭제: ......

반복 데이터 입력 완전 자동화! 파이썬으로 엑셀에 데이터 자동 입력하기

반복 데이터 입력 완전 자동화! 파이썬으로 엑셀에 데이터 자동 입력하기 (완성 코드 공개)

파이썬으로 엑셀에 데이터를 자동으로 입력하는 모습


"매일 아침 어제 매출 데이터를 엑셀 양식에 입력해야 한다", "웹에서 수집한 데이터를 정해진 엑셀 서식에 맞게 채워 넣어야 한다", "매달 거래처 목록을 기준 시트에 업데이트해야 한다"…

정해진 엑셀 양식에 데이터를 반복 입력하는 작업은 단순하지만 시간이 많이 걸리고 오타나 누락 실수가 생기기 쉽습니다. 파이썬을 한 번만 세팅해두면 데이터를 원하는 셀에 정확하게 입력하고, 수식·서식·색상까지 자동으로 적용할 수 있습니다.


1단계: 준비물 설치

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

엑셀 데이터 입력에 필요한 라이브러리를 설치합니다. 터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:

pip install openpyxl pandas

openpyxl은 .xlsx 파일을 읽고 쓰는 라이브러리입니다. 셀 값 입력뿐 아니라 서식, 색상, 수식, 열 너비, 행 높이까지 제어할 수 있습니다. pandas는 CSV나 다른 데이터 소스에서 데이터를 읽어올 때 사용합니다.

💡 이 코드로 할 수 있는 것: 특정 셀에 값 입력, 행 단위로 데이터 추가, 셀 서식(굵기·색상·정렬) 자동 적용, 수식 자동 입력, 기존 엑셀 파일에 데이터 추가(덮어쓰기 없이)까지 처리합니다.

2단계: 완성 코드

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

from openpyxl import Workbook, load_workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.utils import get_column_letter
from pathlib import Path
from datetime import datetime

# ① 설정
OUTPUT_PATH = r"C:\Users\내이름\Desktop\업무일지.xlsx"   # ← 저장 경로
SHEET_NAME  = "일별기록"                                  # ← 시트 이름

# ② 입력할 데이터 (리스트 형태로 추가)
NEW_DATA = [
    {
        "날짜":    datetime.now().strftime("%Y-%m-%d"),
        "거래처":  "A주식회사",
        "담당자":  "홍길동",
        "매출금액": 5200000,
        "납부상태": "완납",
    },
    {
        "날짜":    datetime.now().strftime("%Y-%m-%d"),
        "거래처":  "B기술연구소",
        "담당자":  "김철수",
        "매출금액": 980000,
        "납부상태": "미납",
    },
]

# ③ 헤더 정의 (열 순서와 이름)
HEADERS = ["날짜", "거래처", "담당자", "매출금액", "납부상태"]

# ④ 스타일 정의
HEADER_FONT  = Font(bold=True, color="FFFFFF")
HEADER_FILL  = PatternFill(fill_type="solid", fgColor="2E5090")
CENTER_ALIGN = Alignment(horizontal="center", vertical="center")
BORDER_SIDE  = Side(style="thin", color="CCCCCC")
CELL_BORDER  = Border(left=BORDER_SIDE, right=BORDER_SIDE,
                      top=BORDER_SIDE, bottom=BORDER_SIDE)

# ⑤ 엑셀 파일 열기 (없으면 새로 생성)
output = Path(OUTPUT_PATH)
if output.exists():
    wb = load_workbook(output)
    if SHEET_NAME in wb.sheetnames:
        ws = wb[SHEET_NAME]
    else:
        ws = wb.create_sheet(SHEET_NAME)
        ws.append(HEADERS)   # 헤더 추가
    print(f"  ✔ 기존 파일 열기 완료")
else:
    wb = Workbook()
    ws = wb.active
    ws.title = SHEET_NAME
    ws.append(HEADERS)   # 헤더 추가
    print(f"  ✔ 새 파일 생성")

# ⑥ 헤더 서식 적용
for col_idx, header in enumerate(HEADERS, start=1):
    cell = ws.cell(row=1, column=col_idx)
    cell.font      = HEADER_FONT
    cell.fill      = HEADER_FILL
    cell.alignment = CENTER_ALIGN
    cell.border    = CELL_BORDER

# ⑦ 데이터 입력
start_row = ws.max_row + 1
for row_idx, record in enumerate(NEW_DATA, start=start_row):
    for col_idx, key in enumerate(HEADERS, start=1):
        cell = ws.cell(row=row_idx, column=col_idx, value=record.get(key, ""))
        cell.alignment = CENTER_ALIGN
        cell.border    = CELL_BORDER

        # 금액 열: 숫자 서식 적용
        if key == "매출금액":
            cell.number_format = "#,##0"

        # 미납 상태: 빨간색 배경 강조
        if key == "납부상태" and record.get(key) == "미납":
            cell.fill = PatternFill(fill_type="solid", fgColor="FFD7D7")
            cell.font = Font(color="CC0000", bold=True)

    print(f"  ✔ {row_idx}행 입력: {record.get('거래처', '')} / {record.get('날짜', '')}")

# ⑧ 열 너비 자동 조정
for col in ws.columns:
    max_len = max((len(str(cell.value)) if cell.value else 0) for cell in col)
    ws.column_dimensions[get_column_letter(col[0].column)].width = max_len + 4

# ⑨ 저장
wb.save(output)
print(f"\n✅ 완료! {len(NEW_DATA)}행 입력 → {OUTPUT_PATH}")

3단계: 실행 방법

  1. 코드 ① 설정의 OUTPUT_PATH에 저장할 엑셀 파일 경로를 입력합니다. 파일이 없으면 자동으로 새로 생성됩니다.
  2. 코드 ② 입력할 데이터의 내용을 본인 업무에 맞게 수정합니다.
  3. 코드 ③ 헤더의 열 이름을 데이터 딕셔너리의 키와 동일하게 맞춥니다.
  4. 터미널에서 아래 명령어로 실행합니다:
python excel_input.py

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

  ✔ 새 파일 생성
  ✔ 2행 입력: A주식회사 / 2026-06-08
  ✔ 3행 입력: B기술연구소 / 2026-06-08

✅ 완료! 2행 입력 → C:\Users\내이름\Desktop\업무일지.xlsx

엑셀 파일을 열면 헤더에 파란 배경 서식이 적용되고, 미납 상태 셀은 빨간 배경으로 자동 강조됩니다. 금액 열은 쉼표 구분 숫자 서식이 자동 적용됩니다. 스크립트를 다시 실행하면 기존 데이터 아래에 새 데이터가 추가됩니다.


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

오류 1: PermissionError

저장하려는 엑셀 파일이 현재 열려 있을 때 발생합니다. 엑셀에서 해당 파일을 닫은 후 다시 실행하세요.

오류 2: 데이터가 헤더 위에 입력됨

기존 파일에서 시트는 있지만 헤더가 없는 경우 ws.max_row가 0을 반환해 1행부터 데이터가 입력될 수 있습니다. 이 경우 코드 ⑤에서 기존 시트를 열 때 헤더가 없으면 추가하도록 아래 코드를 삽입하세요:

if ws.max_row == 1 and ws.cell(1, 1).value is None:
    ws.append(HEADERS)

오류 3: 한글이 깨져서 저장됨

openpyxl은 기본적으로 UTF-8을 사용하므로 한글 깨짐이 없습니다. 만약 깨진다면 코드 파일 자체의 인코딩이 UTF-8인지 확인하세요. 메모장으로 저장 시 인코딩을 반드시 UTF-8로 설정합니다.


응용: CSV나 다른 엑셀 파일에서 데이터를 읽어 자동 입력하기

코드 ②의 NEW_DATA를 직접 입력하는 대신, CSV나 다른 엑셀 파일에서 읽어와 자동으로 입력할 수 있습니다.

import pandas as pd

# CSV에서 읽기
SOURCE_CSV = r"C:\Users\내이름\Desktop\입력데이터.csv"
df = pd.read_csv(SOURCE_CSV, encoding="cp949")
NEW_DATA = df.to_dict(orient="records")

# 또는 다른 엑셀에서 읽기
SOURCE_XLSX = r"C:\Users\내이름\Desktop\원본데이터.xlsx"
df = pd.read_excel(SOURCE_XLSX, engine="openpyxl")
NEW_DATA = df.to_dict(orient="records")
💡 이전 게시글과 결합하면: 웹 데이터 자동 수집 편이나 주식·환율 자동 수집 편으로 수집한 데이터를 이 코드로 엑셀에 자동 입력하면, 데이터 수집부터 보고서 작성까지 완전 자동화 파이프라인을 완성할 수 있습니다.

핵심 요약

  • 준비물: Python + openpyxl + pandas 설치 (pip install openpyxl pandas)
  • 설정: OUTPUT_PATH, SHEET_NAME, NEW_DATA(입력할 데이터), HEADERS(열 이름) 수정
  • 실행: 터미널에서 python excel_input.py 입력
  • 결과: 지정한 셀에 데이터 자동 입력, 서식·색상·수식·열 너비 자동 적용, 기존 데이터 아래에 누적 추가

이 코드를 응용하면 조건부 서식, 차트 자동 삽입, 여러 시트에 동시 입력하는 것도 가능합니다.

이 블로그의 인기 게시물

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

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

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