에러 메시지와 코드를 붙이면 무슨 뜻인지 풀어 주고, 가능성 높은 원인부터 확인하는 법과 고친 코드를 줍니다. 보지 못한 부분은 짐작이라고 표시해요.
엑셀 합치기·파일 이름 바꾸기처럼 하고 싶은 일을 적으면 처음 써도 돌아가는 파이썬 코드와 설치·실행 순서를 줍니다. 지우거나 덮어쓰는 일은 하지 않게 해요.
당신은 처음 코딩하는 사람에게도 친절한 파이썬 개발자입니다. 제가 적은 일을 하는 파이썬 코드를 만들고, 제 컴퓨터에서 처음 돌려 보는 데까지 함께 해 주세요. 먼저 할 것 - 제가 하려는 일을 두 문장으로 다시 적고, 입력(무엇을 읽나)과 결과(무엇이 만들어지나)를 한 줄씩 정리하세요. - 제가 적지 않아 정해야 하는 것(파일 형식, 열 이름, 저장 위치 등)은 「가정」 목록에 적고, 그 가정대로 코드를 쓰세요. 코드를 쓸 때 - 파이썬 3.10 이상에서 돌아가게 쓰고, 표준 라이브러리를 먼저 쓰세요. 더하는 패키지는 꼭 필요한 것만, 이유를 한 줄씩 적으세요. - 맨 위에 바꿀 값(폴더 경로, 파일 이름)을 모아 두고, 처음 보는 사람도 알 수 있게 한국어 주석을 다세요. - 파일을 지우거나 덮어쓰지 말고, 결과는 새 파일이나 새 폴더에 저장하세요. 꼭 필요하면 실행 전에 확인을 묻게 하세요. - 흔한 실패(파일이 없음, 열 이름이 다름, 한글 깨짐)는 알아듣기 쉬운 한국어 메시지로 알려 주세요. - 비밀번호나 API 키는 코드에 적지 말고 환경 변수로 읽게 하세요. 만들어 줄 것 1. 할 일 요약과 가정 목록 2. 전체 코드(한 파일) 3. 처음 실행하는 순서: 파이썬 설치 확인 → 패키지 설치 명령 → 실행 명령(제 운영체제 기준) 4. 예상 결과: 무엇이 어디에 생기는지 5. 잘 안 될 때: 자주 나는 에러 3개와 고치는 법 6. 제가 직접 확인할 것 2~3개 정보가 모자라면 지어내지 말고 그 자리를 「확인 필요」로 남긴 채 먼저 써 주세요. 그리고 끝에, 무엇을 더 알려 주면 좋아지는지 한 줄로 물어보세요. 내 작업 - 하고 싶은 일: [예: 월별 엑셀 파일 합치기] - 입력: [파일 종류·위치·예시] - 원하는 결과: [만들어질 파일이나 화면] - 내 컴퓨터: [윈도우 / 맥] - 파이썬 경험: [처음 / 조금 / 익숙함] - 지켜야 할 것: [바꾸면 안 되는 파일 등]
[예: 월별 엑셀 파일 합치기][파일 종류·위치·예시][만들어질 파일이나 화면][윈도우 / 맥][처음 / 조금 / 익숙함][바꾸면 안 되는 파일 등]- 하고 싶은 일: 지점별로 따로 받은 월별 매출 엑셀 파일을 한 파일로 합치고, 지점별 합계 시트를 따로 만들기(예시용 가상 회사) - 입력: 바탕화면 「매출」 폴더 안의 엑셀 파일 12개(강남점_2026-01.xlsx 같은 이름). 시트 하나에 날짜·상품·수량·금액 열이 있음 - 원하는 결과: 「매출_합본.xlsx」 한 파일. 첫 시트는 모든 줄을 이어 붙이고 파일 이름에서 뽑은 지점·월 열을 더함. 둘째 시트는 지점별·월별 금액 합계 - 내 컴퓨터: 윈도우 11 - 파이썬 경험: 처음 - 지켜야 할 것: 원본 엑셀 파일은 건드리지 않기
하려는 일 (두 문장)
지점마다 따로 받은 월별 매출 엑셀 12개를 한 파일로 이어 붙이고, 줄마다 파일 이름에서 뽑은 지점과 월을 적어 넣습니다. 같은 파일에 지점별·월별 금액 합계를 정리한 시트를 하나 더 만들며, 원본 파일은 읽기만 합니다.
가정 (적혀 있지 않아 제가 정했고, 코드도 이대로 썼습니다)
merge_sales.py)openpyxl 하나입니다. 이유: 파이썬 기본 기능에는 엑셀(.xlsx)을 읽고 쓰는 기능이 없습니다. 표 계산용 pandas 같은 큰 패키지는 이 일에 꼭 필요하지 않아 쓰지 않았습니다. 나머지(폴더 찾기, 이름 나누기, 한글 정리)는 모두 파이썬에 기본으로 들어 있는 기능입니다."""
매출 합치기 (merge_sales.py)
바탕 화면 「매출」 폴더의 지점별·월별 엑셀 파일(예: 강남점_2026-01.xlsx)을 읽어서
바탕 화면 「매출_결과」 폴더에 「매출_합본.xlsx」를 새로 만듭니다.
- 첫째 시트 「합본」: 모든 줄을 이어 붙이고, 파일 이름에서 뽑은 지점·월 열을 앞에 더합니다.
- 둘째 시트 「지점별_월별_합계」: 지점(줄)과 월(칸)로 나눈 금액 합계 표입니다.
원본 엑셀 파일은 읽기만 합니다. 고치거나 지우거나 덮어쓰지 않습니다.
"""
# ============================================================
# 1. 바꿀 값: 필요할 때 여기만 고치세요
# ============================================================
# 매출 파일이 든 폴더 이름입니다. 바탕 화면에서 이 이름의 폴더를 찾습니다.
SALES_FOLDER_NAME = "매출"
# 폴더를 자동으로 못 찾았을 때만 채웁니다.
# 탐색기에서 「매출」 폴더를 열고 맨 위 주소창을 누르면 나오는 경로를 따옴표 안에 붙여 넣으세요.
# 예) SALES_FOLDER = r"C:\Users\홍길동\OneDrive\바탕 화면\매출"
SALES_FOLDER = r""
# 결과를 넣을 새 폴더 이름(「매출」 폴더 옆에 만듭니다)과 결과 파일 이름입니다.
RESULT_FOLDER_NAME = "매출_결과"
RESULT_FILE_NAME = "매출_합본.xlsx"
# 원본에 있어야 하는 열 네 개입니다. 날짜·상품·수량·금액 순서는 그대로 두세요.
# (원본 파일 속 열 순서는 파일마다 달라도 됩니다. 이름으로 찾습니다.)
COLUMNS = ["날짜", "상품", "수량", "금액"]
# 어떤 파일의 열 이름이 조금 다르면 {"파일에 적힌 이름": "위 COLUMNS 의 이름"} 꼴로 적으세요.
# 예) COLUMN_ALIASES = {"매출액": "금액", "상품명": "상품"}
COLUMN_ALIASES = {}
# 결과 파일의 시트 이름입니다.
SHEET_ALL = "합본"
SHEET_SUMMARY = "지점별_월별_합계"
# ============================================================
# 2. 여기부터는 고치지 않아도 됩니다
# ============================================================
import os
import re
import sys
import unicodedata
import warnings
import zipfile
from datetime import datetime, time
from pathlib import Path
try:
# openpyxl: 엑셀(.xlsx)을 읽고 쓰는 추가 패키지입니다(파이썬 기본 기능에는 없음).
from openpyxl import Workbook, load_workbook
from openpyxl.styles import Font
from openpyxl.utils import get_column_letter
except ModuleNotFoundError:
sys.exit(
"[멈춤] 엑셀을 읽고 쓰는 openpyxl 이 아직 설치되지 않았습니다.\n"
"터미널에 아래 한 줄을 입력하고, 설치가 끝나면 다시 실행하세요.\n"
" py -m pip install openpyxl"
)
# 원본 파일의 서식 때문에 나오는 영어 경고(읽는 데는 문제없음)를 숨깁니다.
warnings.filterwarnings("ignore", category=UserWarning, module="openpyxl")
# 파일 이름 꼴: 「지점_연도-월」 (예: 강남점_2026-01). 마지막 밑줄(_) 앞을 지점으로 봅니다.
NAME_PATTERN = re.compile(r"^(?P<branch>.+)_(?P<year>\d{4})-(?P<month>\d{1,2})$")
# 날짜나 상품 칸에 이 말만 적힌 줄은 원본의 합계 줄로 보고 넣지 않습니다(두 번 세지 않도록).
# 「확인 필요」 원본에 합계 줄이 있는지, 있다면 어떻게 적혀 있는지는 아직 모릅니다.
TOTAL_WORDS = {"합계", "총계", "소계"}
# 열 이름 줄을 위에서 몇 줄 안에서 찾을지 정합니다(원본 맨 위에 제목 줄이 있어도 되도록).
HEADER_SEARCH_ROWS = 10
class FileProblem(Exception):
"""파일 하나를 합치지 못한 까닭을 한국어로 담습니다."""
def clean(value) -> str:
"""앞뒤 빈칸을 지우고, 자음·모음으로 쪼개진 한글(맥에서 만든 파일 이름에 흔함)을 붙입니다."""
return unicodedata.normalize("NFC", str(value)).strip()
def find_sales_folder() -> Path:
"""「매출」 폴더를 찾습니다. 못 찾으면 어디를 찾아봤는지 알려 주고 멈춥니다."""
if SALES_FOLDER:
folder = Path(SALES_FOLDER)
if folder.is_dir():
return folder
sys.exit(
f"[멈춤] 맨 위 SALES_FOLDER 에 적은 폴더가 없습니다: {folder}\n"
"탐색기 주소창의 경로를 그대로 복사해 다시 붙여 넣어 주세요."
)
# 바탕 화면은 보통 「사용자 폴더\Desktop」이지만, 원드라이브가 백업 중이면 OneDrive 안에 있습니다.
home = Path.home()
desktops = [home / "Desktop"]
for key in ("OneDrive", "OneDriveConsumer", "OneDriveCommercial"):
onedrive = os.environ.get(key)
if onedrive:
desktops += [Path(onedrive) / "바탕 화면", Path(onedrive) / "Desktop"]
desktops += [home / "OneDrive" / "바탕 화면", home / "OneDrive" / "Desktop"]
for desktop in desktops:
if (desktop / SALES_FOLDER_NAME).is_dir():
return desktop / SALES_FOLDER_NAME
tried = "\n".join(f" {desktop / SALES_FOLDER_NAME}" for desktop in dict.fromkeys(desktops))
sys.exit(
f"[멈춤] 바탕 화면에서 「{SALES_FOLDER_NAME}」 폴더를 찾지 못했습니다. 찾아본 곳:\n{tried}\n"
"탐색기에서 매출 폴더를 열고 주소창을 눌러 경로를 복사한 뒤,\n"
'코드 맨 위 SALES_FOLDER = r"" 의 따옴표 안에 붙여 넣고 다시 실행하세요.'
)
def list_excel_files(folder: Path) -> list[Path]:
"""폴더 안의 .xlsx 파일 목록입니다. 엑셀이 파일을 열어 둘 때 생기는 「~$」 임시 파일은 뺍니다."""
files = [
path for path in folder.iterdir()
if path.is_file() and path.suffix.lower() == ".xlsx" and not path.name.startswith("~$")
]
return sorted(files, key=lambda path: clean(path.name))
def branch_and_month(path: Path):
"""파일 이름에서 (지점, 월)을 뽑습니다. 예) 강남점_2026-01.xlsx → ("강남점", "2026-01")"""
match = NAME_PATTERN.match(clean(path.stem))
if not match or not 1 <= int(match["month"]) <= 12:
return None
return match["branch"].strip(), f'{match["year"]}-{int(match["month"]):02d}'
def find_header(rows):
"""위에서 몇 줄 안에서 열 이름 줄을 찾아 (그 줄의 위치, {열 이름: 칸 위치})를 돌려줍니다."""
for index, row in enumerate(rows[:HEADER_SEARCH_ROWS]):
names = [COLUMN_ALIASES.get(clean(v), clean(v)) if v is not None else "" for v in row]
if all(column in names for column in COLUMNS):
return index, {column: names.index(column) for column in COLUMNS}
# 못 찾았으면 이 파일 맨 위 줄에 무엇이 적혀 있는지 보여 줍니다.
first = next((row for row in rows if any(v is not None for v in row)), None)
if first is None:
raise FileProblem("첫 시트가 비어 있습니다.")
first_names = [clean(v) for v in first if v is not None]
mapped = [COLUMN_ALIASES.get(name, name) for name in first_names]
missing = [column for column in COLUMNS if column not in mapped] or COLUMNS
raise FileProblem(
f"{', '.join(missing)} 열을 찾지 못했습니다. 이 파일 맨 위 줄: {', '.join(first_names)}\n"
' → 이름이 다르면 맨 위 COLUMN_ALIASES 에 {"매출액": "금액"} 처럼 적고 다시 실행하세요.'
)
def read_one_file(path: Path):
"""엑셀 파일 하나를 읽어 ([날짜, 상품, 수량, 금액, 엑셀 줄 번호] 목록, 참고 메시지 목록)을 돌려줍니다.
원본은 읽기만 하고 저장하지 않습니다."""
try:
# data_only=True: 수식이 든 칸은 수식 대신 엑셀이 계산해 둔 값을 읽습니다.
workbook = load_workbook(path, data_only=True)
except PermissionError:
raise FileProblem("파일을 열 수 없습니다. 엑셀에서 이 파일을 열어 두었다면 닫고 다시 실행하세요.")
except zipfile.BadZipFile:
raise FileProblem("엑셀(.xlsx)로 열리지 않습니다. "
"암호가 걸려 있거나, 이름만 .xlsx 인 다른 형식일 수 있습니다.")
except Exception as error:
raise FileProblem(f"파일을 여는 중 문제가 생겼습니다({error}).")
notes = []
if not unicodedata.is_normalized("NFC", path.name):
notes.append("파일 이름의 한글이 자음·모음으로 쪼개져 있어(맥에서 만든 파일) 붙여서 읽었습니다.")
sheet = workbook.worksheets[0]
if len(workbook.worksheets) > 1:
notes.append(f"시트가 {len(workbook.worksheets)}개라 첫 시트 「{sheet.title}」만 읽었습니다.")
rows = list(sheet.iter_rows(values_only=True))
header_index, position = find_header(rows)
data = []
for excel_row, row in enumerate(rows[header_index + 1:], start=header_index + 2):
values = [row[position[column]] for column in COLUMNS] # 날짜, 상품, 수량, 금액 순서
if all(v is None or clean(v) == "" for v in values):
continue # 빈 줄은 건너뜁니다.
if any(v is not None and clean(v).replace(" ", "") in TOTAL_WORDS for v in values[:2]):
notes.append(f"{excel_row}번째 줄은 원본의 합계 줄로 보여 넣지 않았습니다(두 번 세지 않도록).")
continue
data.append(values + [excel_row])
return data, notes
def to_number(value):
"""숫자로 바꿉니다. "12,000원" 같은 글자도 읽습니다. 빈칸이거나 숫자가 아니면 None 입니다."""
if isinstance(value, (int, float)):
return value
text = re.sub(r"[,\s원₩]", "", str(value or ""))
try:
number = float(text)
except ValueError:
return None
return int(number) if number.is_integer() else number
def plain_date(value):
"""엑셀 날짜에 붙은 「0시 0분」을 떼어 날짜만 보이게 합니다. 글자로 적힌 날짜는 그대로 둡니다."""
if isinstance(value, datetime) and value.time() == time(0, 0):
return value.date()
return value
def new_file_path(folder: Path, name: str) -> Path:
"""같은 이름 파일이 있으면 덮어쓰지 않도록 _2, _3 … 을 붙인 새 이름을 고릅니다."""
path, number = folder / name, 2
while path.exists():
path = folder / f"{Path(name).stem}_{number}{Path(name).suffix}"
number += 1
return path
def tidy_sheet(sheet, widths, money_from_column):
"""머리줄을 굵게 하고 고정하며, 칸 너비를 넓히고, 금액에 천 단위 쉼표를 붙입니다."""
for cell in sheet[1]:
cell.font = Font(bold=True)
sheet.freeze_panes = "A2"
for index, width in enumerate(widths, start=1):
sheet.column_dimensions[get_column_letter(index)].width = width
for row in sheet.iter_rows(min_row=2, min_col=money_from_column):
for cell in row:
if isinstance(cell.value, (int, float)):
cell.number_format = "#,##0"
def build_workbook(all_rows, totals, branches, months):
"""「합본」 시트와 「지점별_월별_합계」 시트가 든 새 엑셀을 만듭니다(아직 저장 전)."""
workbook = Workbook()
# 첫째 시트: 모든 줄을 이어 붙인 표
sheet = workbook.active
sheet.title = SHEET_ALL
sheet.append(["지점", "월"] + COLUMNS)
for row in all_rows:
sheet.append(row)
tidy_sheet(sheet, [12, 10, 12, 24, 8, 14], money_from_column=6)
# 둘째 시트: 지점(줄) × 월(칸) 금액 합계. 빈 칸은 그 지점·그 달 파일이 없다는 뜻입니다.
summary = workbook.create_sheet(SHEET_SUMMARY)
summary.append(["지점"] + months + ["합계"])
for branch in branches:
amounts = [totals.get((branch, month)) for month in months]
summary.append([branch] + amounts + [sum(a for a in amounts if a is not None)])
month_sums = [sum(totals.get((branch, month), 0) for branch in branches) for month in months]
summary.append(["합계"] + month_sums + [sum(month_sums)])
for cell in summary[summary.max_row]:
cell.font = Font(bold=True)
tidy_sheet(summary, [12] * (len(months) + 1) + [14], money_from_column=2)
return workbook
def main():
sales_folder = find_sales_folder()
files = list_excel_files(sales_folder)
if not files:
sys.exit(f"[멈춤] 이 폴더에 .xlsx 파일이 없습니다: {sales_folder}")
print(f"매출 폴더: {sales_folder}")
print(f"엑셀 파일 {len(files)}개를 읽습니다.\n")
all_rows = [] # 「합본」 시트에 들어갈 줄
totals = {} # (지점, 월) → 금액 합계
source = {} # (지점, 월) → 파일 이름 (같은 지점·월 파일이 두 개인지 보려고)
problems = [] # 합치지 못했거나 합계에서 뺀 것 (저장하기 전에 보여 주고 묻습니다)
for path in files:
name = clean(path.name)
key = branch_and_month(path)
if key is None:
problems.append(f"{name}: 이름이 「지점_연도-월.xlsx」 꼴이 아니라 뺐습니다. "
"(예: 강남점_2026-01.xlsx)")
continue
if key in source:
problems.append(f"{name}: 지점·월이 같은 파일({source[key]})이 이미 있어 뺐습니다. "
"(두 번 세지 않도록)")
continue
try:
rows, notes = read_one_file(path)
except FileProblem as problem:
problems.append(f"{name}: {problem}")
continue
source[key] = name
totals[key] = 0
branch, month = key
not_numbers = [] # 금액이 숫자가 아닌 줄
for date, product, quantity, raw_amount, excel_row in rows:
amount = to_number(raw_amount)
if amount is not None:
totals[key] += amount
elif raw_amount is not None and clean(raw_amount) != "":
not_numbers.append(f"{excel_row}번째 줄 「{raw_amount}」")
all_rows.append([branch, month, plain_date(date), product, quantity,
raw_amount if amount is None else amount])
if not_numbers:
problems.append(f"{name}: 금액이 숫자가 아닌 칸 {len(not_numbers)}개는 합계에서 뺐습니다. "
f"예: {', '.join(not_numbers[:3])}")
print(f" 읽음 {name} ({len(rows)}줄)")
for note in notes:
print(f" 참고: {note}")
if problems:
print(f"\n[확인 필요] 아래 {len(problems)}건은 합치지 못했거나 합계에서 뺐습니다.")
for line in problems:
print(f" - {line}")
if not totals:
sys.exit("\n[멈춤] 합칠 수 있는 파일이 하나도 없어 결과 파일을 만들지 않았습니다.")
if problems:
answer = input("\n이대로 저장할까요? 저장하려면 y 를 입력하고 엔터, 그만두려면 그냥 엔터: ")
if answer.strip().lower() not in ("y", "yes", "ㅛ", "예", "네"):
sys.exit("저장하지 않고 끝냈습니다. 원본 파일은 그대로입니다.")
branches = sorted({branch for branch, _ in totals})
months = sorted({month for _, month in totals})
result_folder = sales_folder.parent / RESULT_FOLDER_NAME
result_folder.mkdir(exist_ok=True) # 폴더가 이미 있으면 그대로 씁니다(안의 파일은 건드리지 않음).
result_path = new_file_path(result_folder, RESULT_FILE_NAME)
build_workbook(all_rows, totals, branches, months).save(result_path)
print(f"\n완료! 결과 파일: {result_path}")
print(f" 「{SHEET_ALL}」 시트: {len(all_rows):,}줄")
print(f" 「{SHEET_SUMMARY}」 시트: 지점 {len(branches)}곳, 월 {len(months)}개")
print(f" 지점 이름: {', '.join(branches)}")
print(f" 금액 총합: {sum(totals.values()):,}")
print("원본 파일은 읽기만 했고, 바뀐 것이 없습니다.")
if __name__ == "__main__":
main()
① 파이썬 설치 확인
py --version
Python 3.13.1처럼 나오고 가운데 숫자가 10 이상이면 통과입니다(3.9 는 3.10 보다 낮은 버전입니다).py --version 을 입력합니다.② 패키지 설치
py -m pip install openpyxl
「Successfully installed openpyxl…」 또는 「Requirement already satisfied」가 나오면 됩니다. 「[notice] A new release of pip…」 안내는 무시해도 됩니다.
③ 코드 파일 저장
merge_sales.py, 파일 형식 「모든 파일 (*.*)」, 인코딩 「UTF-8」로 저장합니다. 「매출」 폴더 안이 아니라 바탕 화면에 둡니다.④ 실행
py merge_sales.py
y 를 입력하고 엔터, 그만두려면 그냥 엔터를 누릅니다.※ .py 파일을 더블클릭해 실행하면 창이 바로 닫혀 안내를 볼 수 없습니다. 꼭 터미널에서 실행하세요.
생기는 것
「합본」 시트 (모양 예시, 값은 가상)
| 지점 | 월 | 날짜 | 상품 | 수량 | 금액 |
|---|---|---|---|---|---|
| 강남점 | 2026-01 | 2026-01-02 | 상품A | 3 | 45,000 |
| 강남점 | 2026-01 | 2026-01-02 | 상품B | 1 | 12,000 |
| … |
「지점별_월별_합계」 시트 (모양 예시, 값은 가상)
| 지점 | 2026-01 | 2026-02 | … | 합계 |
|---|---|---|---|---|
| 강남점 | 4,520,000 | 4,310,000 | … | 지점 합계 |
| ○○점 | 3,980,000 | 4,050,000 | … | 지점 합계 |
| 합계 | 월 합계 | 월 합계 | … | 전체 합계 |
머리줄은 굵게 고정되고, 금액에는 천 단위 쉼표가 붙습니다. 합계 표의 빈 칸은 그 지점·그 달 파일이 없다는 뜻입니다.
터미널 화면 (예시, 줄 수와 금액은 가상)
매출 폴더: C:\Users\(내 이름)\Desktop\매출
엑셀 파일 12개를 읽습니다.
읽음 강남점_2026-01.xlsx (152줄)
읽음 강남점_2026-02.xlsx (147줄)
…
완료! 결과 파일: C:\Users\(내 이름)\Desktop\매출_결과\매출_합본.xlsx
「합본」 시트: 1,803줄
「지점별_월별_합계」 시트: 지점 3곳, 월 4개
지점 이름: 강남점, ○○점, △△점
금액 총합: 98,765,000
원본 파일은 읽기만 했고, 바뀐 것이 없습니다.
원드라이브가 바탕 화면을 백업 중이면 경로가 C:\Users\(내 이름)\OneDrive\바탕 화면\… 으로 나옵니다.
1) 「'py' 용어가 … 인식되지 않습니다」, 또는 python 을 쳤더니 Microsoft Store 가 열림
py 대신 python 만 되는 경우가 있습니다. 그때는 이 글의 명령에서 py 를 python 으로 바꿔 입력합니다(예: python -m pip install openpyxl, python merge_sales.py).2) can't open file '…merge_sales.py': [Errno 2] No such file or directory
merge_sales.py.txt 로 저장됐습니다..txt 가 붙어 있으면 merge_sales.py 로 이름을 바꿉니다. 그다음 그 파일이 보이는 곳에서 「터미널에서 열기」로 터미널을 열고 다시 실행합니다.3) SyntaxError: Non-UTF-8 code starting with … (코드 속 한글이 깨짐)
merge_sales.py 를 열고 「다른 이름으로 저장」에서 인코딩을 「UTF-8」로 골라 같은 이름으로 다시 저장합니다.그 밖에 매출 폴더를 못 찾거나, 열 이름이 다르거나, openpyxl 이 없거나, 파일이 안 열리면 프로그램이 「[멈춤]」이나 「[확인 필요]」로 시작하는 한국어 안내를 띄웁니다. 안내대로 고치거나, 그 문장을 그대로 보내 주세요.
「확인 필요」로 남긴 부분을 채울 수 있게, 원본 파일 하나의 맨 위 두세 줄과 맨 아래 줄 모양(금액은 가려도 됩니다)과 12개가 어느 지점의 몇 월분인지 알려 주시겠어요?
위 예시 입력으로 이 프롬프트를 AI(Claude)에 그대로 넣어 받은 답이에요. 모델과 시점에 따라 표현은 달라질 수 있어요.
됩니다. 이 프롬프트는 설치 확인 명령과 실행 명령을 내 운영체제에 맞춰 적게 했어요. 처음 실행할 땐 결과를 새 폴더에 저장하게 했으니, 원본 파일이 그대로인지 한 번 확인하세요.
한 파일 안에서 계산하는 일은 수식이 빠르고, 파일 여러 개를 합치거나 매주 같은 일을 반복하는 일은 파이썬이 편해요. 수식은 엑셀 수식 프롬프트, 표를 요약하고 그래프를 고르는 일은 데이터 분석 프롬프트를 쓰세요.
됩니다. 셋 다 파이썬 코드를 잘 써요. 코드가 길어 중간에 끊기면 「이어서」라고 하면 나머지를 받아요.
윈도우는 작업 스케줄러, 맥은 cron이나 단축어로 돌릴 수 있어요. 같은 대화에 「매일 아침 9시에 돌게 해 줘, 내 컴퓨터는 윈도우」라고 이어서 물어보세요.
#파이썬#파이썬 프롬프트#파이썬 코드#파이썬 자동화#코딩 프롬프트#챗GPT 파이썬#클로드 파이썬#업무 자동화#엑셀 자동화
에러 메시지와 코드를 붙이면 무슨 뜻인지 풀어 주고, 가능성 높은 원인부터 확인하는 법과 고친 코드를 줍니다. 보지 못한 부분은 짐작이라고 표시해요.
길고 복잡한 코드를 붙이면 동작은 바꾸지 않고 함수를 나누고 이름을 고친 코드를 줍니다. 바꾸기 전에 지금 동작을 잡아 두는 테스트부터 써요.
테이블 구조와 뽑고 싶은 결과를 적으면 바로 돌릴 수 있는 SQL과 한 줄씩 풀이, 결과 모양을 줍니다. 지우거나 바꾸는 쿼리는 미리 보기부터 해요.
프로젝트에 대해 아는 것을 적으면 깃허브 README 초안을 섹션별로 씁니다. 적지 않은 기능·명령·라이선스는 지어내지 않고 「확인 필요」로 남겨요.
만들고 싶은 앱을 설명하면 AI 가 먼저 질문하고, 한 장 기획서와 단계별 계획을 세운 뒤 한 기능씩 만들게 합니다. 단계마다 직접 해 볼 확인법도 줘요.
스택·폴더 구조·코딩 규칙을 넣으면 Cursor 공식 형식의 .cursor/rules 규칙 파일과 AGENTS.md 초안을 만듭니다. 예전 .cursorrules 도 옮겨요.

만들면 뭐하나, 알려야지.
드림보트에 프로젝트를 올리면 저희가 대신 홍보해 드려요. 물론 무료예요.