회계 밖 세상
CSV 파일 합치는 두 가지 방법: 파이썬 vs 배치파일 본문
데이터 분석이나 업무 자동화를 하다 보면 여러 개의 CSV 파일을 하나로 합쳐야 하는 상황이 자주 발생합니다. 이번 글에서는 CSV 파일을 합치는 두 가지 실용적인 방법을 소개해 드리려고 합니다.
1. 파이썬 코드로 CSV 파일 합치기
파이썬의 pandas 라이브러리를 사용하면 CSV 파일을 쉽게 합칠 수 있습니다. 이 방법은 다양한 옵션과 세부 조정이 가능하다는 장점이 있습니다.
import pandas as pd
from glob import glob
# 폴더 내의 모든 csv파일 목록을 불러온다
file_names = glob("data/*.csv")
# 빈 데이터프레임 하나를 생성한다
total = pd.DataFrame()
# 방법 1: 파일을 하나씩 읽어서 합치기
for file_name in file_names:
# 여기서 구분자를 실제 파일에 맞게 설정해야 합니다 (예: ',', ';', '\t')
temp = pd.read_csv(file_name, sep=',', encoding='utf-8')
# 전체 데이터프레임에 추가한다
total = pd.concat([total, temp])
# 결과를 저장한다
total.to_csv("data/total.csv", index=False)
# 방법 2: 리스트로 모은 후 한 번에 합치기 (더 효율적)
df_list = [pd.read_csv(f, sep=',', encoding='utf-8') for f in file_names]
total = pd.concat(df_list, ignore_index=True)
total.to_csv("data/total.csv", index=False)
파이썬 방식의 장점
- 인코딩 설정: UTF-8, CP949 등 다양한 인코딩 설정이 가능합니다.
- 구분자 지정: 쉼표(,), 세미콜론(;), 탭(\t) 등 다양한 구분자를 지정할 수 있습니다.
- 머리글 자동 처리: pandas는 첫 번째 파일의 헤더만 유지하고 나머지는 자동으로 처리합니다.
- 데이터 전처리: 합치기 전에 데이터 필터링, 변환, 정렬 등의 작업이 가능합니다.
- 인덱스 제어: index=False 옵션으로 불필요한 인덱스 컬럼 생성을 방지할 수 있습니다.
단점
- 파이썬과 pandas 라이브러리가 설치되어 있어야 합니다.
- 간단한 작업에는 다소 복잡할 수 있습니다.
2. 배치파일로 CSV 파일 합치기
배치 파일은 Windows에서 간단히 명령어를 실행할 수 있는 스크립트 파일입니다. 아래는 배치 파일을 사용해 CSV 파일을 합치는 방법입니다.
배치 파일 만들기
- CSV 파일이 있는 폴더에서 우클릭 > 새로 만들기 > 텍스트 문서를 선택합니다.
- 메모장에 다음과 같이 입력합니다:
type *.csv > total.csv
- 파일을 "파일합치기.bat"이라는 이름으로 저장합니다. (이름은 자유롭게 선택 가능하지만 확장자는 반드시 .bat이어야 합니다)
- 생성된 "파일합치기.bat" 파일을 더블클릭하여 실행합니다.
- 실행창이 열리면서 파일합치기가 자동으로 수행됩니다.
- 주의: 머리글(헤더)이 있는 경우 중복으로 들어가므로, 완성된 CSV 파일을 열어서 중복된 헤더 행을 삭제해야 합니다.
배치 파일 방식의 장점
- 간편함: 추가 소프트웨어 설치 없이 Windows에서 바로 실행 가능합니다.
- 속도: 간단한 작업에 대해 매우 빠르게 실행됩니다.
- 접근성: 프로그래밍 지식이 없어도 쉽게 사용할 수 있습니다.
단점
- 머리글 중복 문제를 수동으로 해결해야 합니다.
- 인코딩 설정이 제한적입니다.
- 구분자가 다른 CSV 파일은 제대로 합치기 어렵습니다.
- 데이터 전처리 옵션이 제한적입니다.
어떤 방법을 선택해야 할까?
파이썬 코드를 사용해야 할 때
- 다양한 인코딩의 파일을 다룰 때
- 구분자가 다른 파일들을 합칠 때
- 데이터 필터링이나 변환이 필요할 때
- 자동화된 워크플로우에 통합해야 할 때
- 대용량 데이터 처리가 필요할 때
배치 파일을 사용해야 할 때
- 빠르게 작업해야 할 때
- 모든 CSV 파일이 동일한 형식을 가질 때
- 파이썬 환경 설정이 어려울 때
- 단순 파일 결합만 필요할 때
고급 파이썬 기법: 효율적인 CSV 파일 병합
초보자 방식 vs 효율적인 방식
CSV 파일을 합치는 방법에는 몇 가지 접근법이 있습니다. 초보자들이 자주 사용하는 방식은 아래와 같이 파일을 하나씩 읽어 합치는 것입니다:
# 초보자 방식: 파일을 하나씩 읽어서 합치기 (비효율적)
total = pd.DataFrame()
for file_name in file_names:
temp = pd.read_csv(file_name, sep=',', encoding='utf-8')
total = pd.concat([total, temp]) # 매번 concat 호출로 비효율적
하지만 이 방식은 매번 concat을 호출하여 새로운 데이터프레임을 생성하므로 파일이 많을수록 비효율적입니다. 앞서 소개한 리스트 컴프리헨션 방식이 훨씬 더 효율적입니다.
대용량 파일 처리 방법
대용량 CSV 파일을 처리할 때는 메모리 문제가 발생할 수 있습니다. 이럴 때는 chunksize 매개변수를 사용하여 파일을 작은 조각으로 나눠 처리하는 방법이 효과적입니다:
with open("data/total.csv", "w", encoding="utf-8", newline='') as f_out:
header_written = False
for fname in glob("data/*.csv"):
for chunk in pd.read_csv(fname, chunksize=500000, encoding="utf-8"):
chunk.to_csv(f_out, index=False, header=not header_written, mode='a')
header_written = True
이 코드는:
- 파일을 500,000행씩 나눠 처리합니다
- 첫 번째 청크에서만 헤더를 쓰고 나머지에서는 생략합니다
- 결과 파일에 점진적으로 추가하므로 전체 데이터를 메모리에 로드하지 않습니다
이 방법은 수 GB 크기의 CSV 파일도 효율적으로 처리할 수 있게 해줍니다.
결론
CSV 파일을 합치는 작업은 데이터 관리에서 자주 필요한 작업입니다. 파이썬 코드를 사용하면 더 많은 제어와 옵션을 가질 수 있지만, 간단한 작업에는 배치 파일이 더 빠르고 편리할 수 있습니다. 자신의 필요와 환경에 맞는 방법을 선택하시면 됩니다.
작업의 복잡성이나 반복성, 그리고 파일 크기를 고려하여 적절한 방법을 선택하는 것이 중요합니다:
- 간단한 소규모 파일 병합 → 배치 파일
- 중간 규모 파일 병합 → 리스트로 읽은 후 일괄 병합
- 대용량 파일 병합 → 청크 단위 처리
자주 반복되는 작업이라면 처음에 시간을 투자해서 파이썬 스크립트를 만들어 두는 것이 장기적으로는 더 효율적일 수 있습니다.
'IT이야기' 카테고리의 다른 글
윈도우 11 탐색기에서 원드라이브 폴더 중복 표시 문제 해결하기 (0) | 2025.04.22 |
---|---|
IMAP과 POP3: 이메일 프로토콜의 차이점 완벽 정리 (0) | 2025.04.19 |