파이썬(Python) 업무 자동화 기초: 엑셀 파일 100개 1초 만에 합치기
증상 확인: 반복적이고 지루한 엑셀 파일 병합 작업
당신은 매주, 혹은 매일 같은 형식의 엑셀 파일(.xlsx, .xls)을 수십 개에서 수백 개씩 받습니다. 각 파일은 ‘1월_매출.xlsx’, ‘2월_매출.xlsx’와 같이 비슷한 이름을 가지고 있으며, 열(Column) 구조는 동일합니다. 당신의 업무는 이 모든 파일을 하나의 시트로 합쳐서 분석하거나 보고서를 작성하는 것입니다. 마우스로 파일을 열고, 데이터를 복사(Ctrl+C)하고, 붙여넣기(Ctrl+V)하는 작업을 반복하고 계신가요? 이 작업은 단순할 뿐만 아니라, 실수로 행을 건너뛰거나 파일을 중복으로 합치는 치명적인 오류를 만들기 쉽습니다. 지금 당장 이 반복 작업을 자동화해야 할 때입니다.
원인 분석: 수동 작업의 비효율성과 위험성
수동 병합의 근본적 문제는 인간이 반복적 작업에 취약하다는 점입니다. 피로가 쌓이면 실수가 발생하고, 파일이 100개가 넘어가면 작업 자체가 물리적으로 하루 종일 걸릴 수 있습니다. 또한, 추후에 원본 데이터가 수정되면 전체 과정을 처음부터 다시 시작해야 하는 악순환이 반복됩니다, 이는 단순히 시간 낭비를 넘어서 비즈니스 결정의 신속성과 정확성을 해치는 직접적인 위협입니다. 파이썬을 이용한 자동화는 이러한 인적 오류를 제거하고, 프로세스를 표준화하며, 필요할 때 언제든지 몇 초 만에 재실행할 수 있는 ‘살아 있는 해결책’을 만드는 것입니다.
해결 방법 1: 필수 라이브러리 설치와 환경 준비
가장 먼저, 파이썬과 필요한 도구를 준비합니다. 이 방법은 이후 모든 작업의 기초가 됩니다. 파이썬이 설치되어 있지 않다면 공식 홈페이지에서 최신 버전을 설치하십시오. 설치 과정에서 ‘Add Python to PATH’ 옵션을 꼭 체크하는 것이 중요합니다.
주의사항: 라이브러리 설치 전 반드시 파이썬 설치를 확인하십시오. 명령 프롬프트(cmd)나 터미널에서 python –version 또는 py –version을 입력하여 버전 정보가 출력되는지 확인하십시오. 출력되지 않는다면 PATH 설정이 잘못된 것입니다.
필요한 라이브러리는 pandas와 openpyxl입니다. pandas는 데이터 조작의 핵심 도구이며, openpyxl은 엑셀 파일을 읽고 쓰기 위한 엔진입니다, 아래 명령어로 한 번에 설치합니다.
- 명령 프롬프트(cmd) 또는 터미널을 관리자 권한으로 실행합니다.
- 다음 명령을 입력합니다: pip install pandas openpyxl
- 설치가 완료되면 pip list 명령으로 pandas와 openpyxl이 목록에 있는지 확인합니다.
해결 방법 2: 기본 코드 작성 – 특정 폴더의 모든 엑셀 파일 합치기
이제 본격적인 코드를 작성합니다. 아래 코드는 ‘C:\merge_project’ 폴더에 있는 모든 엑셀 파일을 찾아 첫 번째 시트의 데이터를 수직으로 합치는 가장 기본적인 형태입니다.
먼저, 메모장이나 VS Code, PyCharm 같은 코드 편집기를 열고 아래 코드를 복사하여 붙여넣습니다. file_path 변수의 경로를 자신의 엑셀 파일들이 모여 있는 폴더 경로로 변경하는 것이 핵심입니다.
import pandas as pd
import os
import glob
# 1. 파일들이 있는 폴더 경로 설정 (반드시 수정 필요)
folder_path = r’C:\merge_project’
# 2. 해당 폴더 내 모든 엑셀 파일 경로 리스트 생성
excel_files = glob.glob(os.path.join(folder_path, “*.xlsx”)) + glob.glob(os.path.join(folder_path, “*.xls”))
# 3. 모든 데이터를 담을 빈 DataFrame 생성
combined_data = pd.DataFrame()
# 4. 각 엑셀 파일을 순회하며 데이터 읽고 합치기
for file in excel_files:
# 파일명만 추출 (로그 출력용)
file_name = os.path.basename(file)
print(f”처리 중: {file_name}”)
# 엑셀 파일 읽기 (첫 번째 시트 기준)
df = pd.read_excel(file, engine=’openpyxl’)
# 합치기
combined_data = pd.concat([combined_data, df], ignore_index=True)
# 5. 합쳐진 데이터를 새로운 엑셀 파일로 저장
output_path = os.path.join(folder_path, “통합_결과.xlsx”)
combined_data.to_excel(output_path, index=False, engine=’openpyxl’)
print(f”작업 완료! 파일이 저장되었습니다: {output_path}”)
print(f”총 {len(excel_files)}개 파일에서 {len(combined_data)}행 데이터가 병합되었습니다.”)
코드를 실행하기 전에 다음 사항을 확인하십시오.
- folder_path 변수의 경로가 실제 존재하는 경로인지 확인.
- 대상 폴더에 병합하려는 엑셀 파일만 있는지 확인 (다른 파일이 있더라도 확장자 필터로 걸러지므로 큰 문제는 없음).
- 코드를 merge_excel.py와 같은 이름으로 .py 확장자로 저장합니다.
저장한 파이썬 파일을 더블클릭하거나, 터미널에서 python merge_excel.py 명령으로 실행합니다. 콘솔에 처리 중인 파일명이 출력되고. 작업 완료 메시지와 함께 지정한 폴더에 ‘통합_결과.xlsx’ 파일이 생성됩니다.
해결 방법 3: 고급 제어 – 특정 시트, 특정 열만 선택적으로 합치기
실제 업무에서는 더 복잡한 요구사항이 있습니다, 모든 파일의 두 번째 시트만 합치거나, 특정 열(‘매출액’, ‘이름’)만 추출해야 할 수 있습니다. 아래 코드는 이러한 고급 제어를 가능하게 합니다.
import pandas as pd
import os
import glob
folder_path = r’C:\merge_project’
excel_files = glob.glob(os.path.join(folder_path, “*.xlsx”))
combined_data = pd.DataFrame()
for file in excel_files:
file_name = os.path.basename(file)
# 고급 설정 1: 특정 시트 이름으로 읽기
# 시트 이름이 ‘Sheet2’인 데이터만 읽으려면:
# df = pd.read_excel(file, sheet_name=’Sheet2′, engine=’openpyxl’)
# 고급 설정 2: 특정 열만 읽기 (usecols)
# ‘A’열(사원번호)과 ‘C’열(매출액)만 읽으려면:
# df = pd.read_excel(file, usecols=’A,C’, engine=’openpyxl’)
# 또는 열 이름으로 지정: usecols=[‘사원번호’, ‘매출액’]
# 고급 설정 3: 위 두 가지를 조합 + 원본 파일명 추가
df = pd.read_excel(file, sheet_name=’Sheet1′, usecols=[‘날짜’, ‘상품명’, ‘금액’], engine=’openpyxl’)
# 각 데이터에 원본 파일명을 새로운 열로 추가 (데이터 추적용)
df[‘원본_파일’] = file_name
combined_data = pd.concat([combined_data, df], ignore_index=True)
# 고급 설정 4: 병합 후 데이터 정렬
# ‘날짜’ 열을 기준으로 오름차순 정렬
if ‘날짜’ in combined_data.columns:
combined_data[‘날짜’] = pd.to_datetime(combined_data[‘날짜’]) # 날짜 형식 변환
combined_data = combined_data.sort_values(by=’날짜’)
output_path = os.path.join(folder_path, “통합_결과_정렬.xlsx”)
combined_data.to_excel(output_path, index=False, engine=’openpyxl’)
print(“고급 병합 작업 완료.”)
이 코드의 핵심은 pd.read_excel() 함수의 매개변수를 조정하는 것입니다. sheet_name, usecols를 활용하면 필요 없는 데이터를 메모리에 불러오지 않아 처리 속도가 빨라지고, 결과물도 깔끔해집니다. 데이터 추적을 위해 원본 파일명을 추가하는 열을 만드는 것은 실무에서 데이터 출처를 관리하는 매우 중요한 습관입니다.
주의사항 및 문제 해결
코드를 실행하다 보면 예상치 못한 오류가 발생할 수 있습니다. 가장 흔한 에러와 해결책을 정리했습니다. 다만 문제를 진단하고 대응하는 과정은 개발 영역에만 국한되지 않으며, 여유증(여성형 유방증) 수술 비용 및 실비 보험 적용 기준(사이먼 등급)처럼 기준·유형·등급을 정확히 구분해 원인을 분류하는 접근이 핵심이라는 점에서 공통된 사고 체계를 공유합니다.
- ModuleNotFoundError: No module named ‘pandas’: 라이브러리 설치가 안 된 상태. pip install pandas openpyxl 명령을 다시 실행하고, 여러 파이썬 버전이 설치된 경우 py -3.10 -m pip install … 처럼 특정 버전을 지정하여 설치.
- PermissionError: [Errno 13] Permission denied: 결과 파일을 저장하려는 경로나 기존 파일을 다른 프로그램(예: 열려 있는 엑셀)이 사용 중. 모든 엑셀 파일을 닫고, 관리자 권한으로 터미널을 실행하여 코드를 다시 실행.
- FileNotFoundError: [Errno 2] No such file or directory: folder_path에 입력한 경로가 존재하지 않음. 경로 문자열 앞의 r(Raw String)을 빼먹었거나, 폴더 이름을 잘못 입력했는지 확인. 예: r’C:\Users\사용자\Documents\엑셀파일들’
- 데이터 형식 불일치: 합친 후에 숫자가 텍스트로 보이거나 날짜가 깨지는 현상. 이는 각 원본 파일의 셀 서식이 달라 발생. pandas로 읽은 후 df[‘열이름’] = pd.to_numeric(df[‘열이름’], errors=’coerce’) 나 pd.to_datetime() 함수로 데이터 타입을 통일시키는 후처리 코드를 추가해야 함.
전문가 팁: 안전하고 효율적인 자동화를 위한 체크리스트
1. 원본 데이터 백업 필수: 스크립트를 실행하기 전, 원본 엑셀 파일들이 있는 폴더 전체를 다른 위치에 복사해 두십시오. 코드에 치명적인 오류가 있어도 원본은 안전해야 합니다.
2. 테스트는 소량으로: 처음에는 3~5개의 파일로만 테스트하여 결과가 정상인지 확인한 후, 전체 파일에 적용하십시오.
3. 로그 기록하기: print 문으로 처리 파일명을 출력하는 것은 기본. 더 더욱이서는 logging 모듈을 사용하여 실행 일시, 처리 건수, 발생 오류 등을 텍스트 파일에 기록하도록 코드를 발전시키십시오. 이는 추후 문제 진단의 결정적 증거가 됩니다.
4. 예외 처리 추가: for 루프 안에 try-except 문을 추가하여 특정 파일에서 오류가 발생해도 나머지 파일 처리는 계속 진행되도록 하십시오. 이렇게 하면 100개 파일 중 99번째에서 에러가 나도 처음부터 다시 시작할 필요가 없습니다.
5, 스케줄러 연동: 이 작업이 주기적으로 필요하다면, 작성한 파이썬 스크립트를 windows 작업 스케줄러나 cron(linux/macos)에 등록하여 매주 월요일 아침 9시에 자동 실행되도록 설정하십시오. 완전한 ‘핸즈오프(Hands-off)’ 자동화의 완성입니다.
이 가이드를 따라한다면, 엑셀 파일 병합이라는 단순 업무는 이제 몇 초 안에 끝나는 일상적 작업이 됩니다. 중요한 것은 이 시간을 절약하여 데이터 분석 그 자체나, 더 가치 있는 업무에 집중할 수 있게 된다는 점입니다. 파이썬 자동화의 첫걸음을 내딛은 것을 축하합니다. 이 기본 코드를 바탕으로 자신의 업무에 맞게 변형하고 발전시키는 것이 진정한 실력이 됩니다.