회사 업무나 프로젝트를 진행하다 보면 엑셀 파일(.xlsx) 못지않게 자주 마주치는 데이터 포맷이 있습니다. 바로 CSV(Comma-Separated Values) 파일과 일반 텍스트(.txt) 파일입니다.
각종 사내 전산 시스템, 데이터베이스(DB), 웹 사이트에서 대용량 데이터를 다운로드하면 대부분 엑셀보다 가볍고 빠른 CSV 형태로 제공됩니다. 하지만 용량이 수백 Megabyte에 달하는 대용량 CSV나 텍스트 파일은 엑셀 프로그램으로 직접 열려고 하면 프로그램이 멈추거나 먹통이 되기 일쑤입니다.
저 역시 초보 시절, 10만 줄이 넘는 고객 로그 데이터 CSV 파일을 엑셀로 열었다가 컴퓨터가 멈춰버려 작업을 처음부터 다시 해야 했던 쓰라린 경험이 있습니다. 오늘은 파이썬의 내장 모듈과 pandas 라이브러리를 활용해 수십만 줄의 CSV 및 텍스트 데이터를 3초 만에 깔끔하게 읽고, 정제하고, 일괄 처리하는 실전 테크닉을 정리해 드립니다.
1. CSV 파일이란 무엇인가? (엑셀과의 차이점)
CSV는 '쉼표로 구분된 값들'이라는 뜻 그대로, 복잡한 서식(색상, 폰트, 수식 등)을 전부 빼고 오직 텍스트 데이터만 쉼표(,)로 구분하여 저장한 아주 가벼운 파일 포맷입니다.
엑셀 파일은 다양한 시트와 화려한 디자인을 담을 수 있는 대신 파일 용량이 크고 읽는 속도가 느립니다. 반면 CSV 파일은 용량이 획기적으로 작고 처리 속도가 압도적으로 빠르기 때문에 대용량 데이터 전송 및 업무 자동화의 표준으로 사용됩니다.
2. 파이썬 내장 csv 모듈로 안전하게 데이터 읽고 쓰기
파이썬에는 외부 라이브러리를 별도로 설치하지 않아도 CSV 파일을 다룰 수 있는 csv 내장 모듈이 기본 탑재되어 있습니다.
CSV 파일 읽기 실전 코드
import csv
# encoding="utf-8-sig"는 엑셀 연동 시 한글 깨짐을 방지하는 핵심 옵션입니다.
with open("2026_고객목록.csv", "r", encoding="utf-8-sig") as file:
# csv.reader를 통해 쉼표 기준으로 데이터를 리스트 형태로 읽어옵니다.
reader = csv.reader(file)
# 첫 번째 줄(헤더: 이름, 이메일, 전화번호 등) 건너뛰기
header = next(reader)
print(f"헤더 정보: {header}")
for row in reader:
# row는 하나의 행이 리스트로 변환된 형태입니다.
name = row[0]
email = row[1]
print(f"고객명: {name}, 이메일: {email}")
CSV 파일 쓰기 실전 코드
import csv
data = [
["상품명", "가격", "재고"],
["무선 마우스", 25000, 50],
["기계식 키보드", 89000, 20]
]
with open("2026_재고현황.csv", "w", newline="", encoding="utf-8-sig") as file:
writer = csv.writer(file)
# writerows는 2차원 리스트 전체를 한 번에 파일로 작성합니다.
writer.writerows(data)
여기서 가장 중요한 매개변수는 newline=""과 encoding="utf-8-sig"입니다.
newline="": 이 옵션을 빠뜨리면 윈도우 환경에서 CSV 파일을 저장할 때 행과 행 사이에 불필요한 빈 줄이 한 줄씩 추가되는 버그가 발생합니다.encoding="utf-8-sig": 단순utf-8대신-sig(Signature)를 붙여주어야 엑셀 프로그램에서 해당 CSV 파일을 열었을 때 한글이 깨지지 않고 정상적으로 출력됩니다.
3. 대용량 CSV 처리의 끝판왕: pandas 활용하기
만약 다루어야 할 CSV 파일이 수만 줄 이상이거나 여러 조건으로 필터링하고 가공해야 한다면, 내장 csv 모듈 대신 파이썬 대표 데이터 분석 라이브러리인 pandas(판다스)를 사용하는 것이 훨씬 효율적입니다.
pip install pandas 명령어로 설치 후 단 두 줄만으로 대용량 파일을 읽어올 수 있습니다.
import pandas as pd
# CSV 파일 읽어오기 (DataFrame 객체 생성)
df = pd.read_csv("2026_대용량_매출데이터.csv", encoding="utf-8-sig")
# 조건 필터링: 매출액이 100,000원 이상인 데이터만 추출
high_sales = df[df['매출액'] >= 100000]
# 정제된 데이터를 새로운 CSV로 저장
high_sales.to_csv("2026_고액매출_정제.csv", index=False, encoding="utf-8-sig")
print("데이터 필터링 및 일괄 처리가 완료되었습니다!")
pandas를 활용하면 반복문을 복잡하게 돌리지 않고도 한 줄의 조건식만으로 수십만 줄의 데이터를 눈 깜짝할 사이에 걸러내고 가공할 수 있습니다.
4. 일반 텍스트 파일(.txt) 비정형 데이터 정제 팁
구분자(쉼표, 탭)가 명확하지 않은 일반 텍스트 파일이나 로그 파일을 읽어와 정제할 때는 split()과 strip() 메서드가 유용하게 쓰입니다.
with open("system_log.txt", "r", encoding="utf-8") as f:
for line in f:
# strip()으로 앞뒤 공백 및 줄바꿈(\n) 제거
cleaned_line = line.strip()
# 'ERROR'라는 단어가 포함된 특정 줄만 추출
if "ERROR" in cleaned_line:
# 공백 기준으로 단어 나누기
log_parts = cleaned_line.split(" ")
print(f"발생 시각: {log_parts[0]} {log_parts[1]} | 내용: {cleaned_line}")
이처럼 텍스트 파일의 각 줄을 문자열로 다루면서 필요한 키워드가 들어간 줄만 뽑아내면, 수천 줄의 시스템 로그 중 에러 내역만 빠르게 파악하는 자동화 스크립트를 완성할 수 있습니다.
핵심요약
CSV 파일은 텍스트 기반의 가벼운 데이터 포맷으로, 대용량 데이터를 빠르고 안전하게 처리하는 데 최적화되어 있습니다.
윈도우 환경에서 CSV 파일 생성 시
newline=""과encoding="utf-8-sig"옵션을 설정해야 빈 줄 삽입 및 한글 깨짐 현상을 예방할 수 있습니다.대용량 CSV 데이터 필터링에는
pandas라이브러리를, 비정형 텍스트 파일에는strip()및split()문자열 메서드를 조합하는 것이 정제 테크닉의 핵심입니다.


0 댓글