안녕하세요, 코딩하는곰입니다! 오늘은 Python에서 CSV 파일을 다루는 방법에 대해 깊이 있게 알아보려고 합니다. 데이터 분석이나 웹 개발을 하다 보면 CSV 파일을 다룰 일이 정말 많죠. Python의 csv 모듈을 활용하면 간단하면서도 강력하게 CSV 파일을 처리할 수 있습니다. 이 글에서는 csv.reader와 csv.writer를 중심으로 실제 프로젝트에서 바로 적용할 수 있는 실용적인 예제들과 팁들을 공개합니다!
CSV(Comma-Separated Values)는 데이터를 쉼표로 구분하는 간단한 텍스트 파일 형식입니다. Python의 내장 모듈인 csv를 사용하면 이러한 파일들을 쉽게 읽고 쓸 수 있습니다. 먼저 기본적인 csv.reader의 사용법부터 알아보겠습니다.
import csv# CSV 파일 읽기 기본 예제with open('data.csv', 'r', encoding='utf-8') as file:csv_reader = csv.reader(file)# 헤더 읽기headers = next(csv_reader)print(f"헤더: {headers}")# 데이터 행 읽기for row in csv_reader:print(f"행 데이터: {row}")
csv.reader는 파일 객체를 받아 CSV 리더 객체를 반환합니다. 이 객체는 이터레이터로 동작하기 때문에 for 루프에서 직접 사용할 수 있습니다. encoding 매개변수를 지정하는 것은 한글 처리를 위해 매우 중요합니다. 주로 ‘utf-8’이나 ‘cp949’를 사용하게 됩니다. 다양한 구분자를 가진 CSV 파일을 처리하는 방법도 알아봅시다. 어떤 파일은 탭으로 구분된 TSV 파일일 수도 있습니다.
# 탭으로 구분된 파일 읽기with open('data.tsv', 'r', encoding='utf-8') as file:tsv_reader = csv.reader(file, delimiter='\t')for row in tsv_reader:print(row)# 세미콜론으로 구분된 파일 읽기with open('data_semicolon.csv', 'r', encoding='utf-8') as file:semicolon_reader = csv.reader(file, delimiter=';')for row in semicolon_reader:print(row)
💻 프로그래밍에 관심이 많다면, (JVM 깊이보기) 자바 가상 머신의 탄생 배경과 핵심 구조 분석를 참고해보세요.
이제 CSV 파일을 작성하는 방법을 알아보겠습니다. csv.writer를 사용하면 Python 데이터를 CSV 형식으로 쉽게 저장할 수 있습니다. 기본적인 사용법부터 시작해보죠.
import csv# 데이터 준비data = [['이름', '나이', '직업'],['김철수', '30', '개발자'],['이영희', '25', '디자이너'],['박민수', '35', '기획자']]# CSV 파일 쓰기with open('output.csv', 'w', encoding='utf-8', newline='') as file:csv_writer = csv.writer(file)# 모든 행 쓰기csv_writer.writerows(data)# 또는 행 단위로 쓰기# for row in data:# csv_writer.writerow(row)print("CSV 파일 작성 완료!")
newline=” 매개변수는 Windows 환경에서 개행 문자가 이중으로 들어가는 문제를 방지합니다. writerow() 메서드는 단일 행을, writerows() 메서드는 여러 행을 한 번에 작성합니다. 더 복잡한 데이터를 처리할 때는 DictReader와 DictWriter를 사용하는 것이 더 편리합니다. 이들은 딕셔너리 형태로 데이터를 처리합니다.
# DictReader 사용 예제with open('data.csv', 'r', encoding='utf-8') as file:dict_reader = csv.DictReader(file)for row in dict_reader:print(f"이름: {row['이름']}, 나이: {row['나이']}")# DictWriter 사용 예제fieldnames = ['이름', '나이', '직업']data_dict = [{'이름': '김철수', '나이': '30', '직업': '개발자'},{'이름': '이영희', '나이': '25', '직업': '디자이너'}]with open('output_dict.csv', 'w', encoding='utf-8', newline='') as file:dict_writer = csv.DictWriter(file, fieldnames=fieldnames)# 헤더 쓰기dict_writer.writeheader()# 데이터 쓰기dict_writer.writerows(data_dict)
최근 당첨번호와 통계를 한눈에 보고 싶다면, AI 번호 추천과 QR코드 확인이 가능한 지니로또AI를 설치해보세요.
실제 프로젝트에서 마주칠 수 있는 다양한 상황과 그 해결 방법을 알아보겠습니다. 첫 번째로 흔히 마주치는 인코딩 문제입니다.
# 다양한 인코딩 시도encodings = ['utf-8', 'cp949', 'euc-kr', 'iso-8859-1']for encoding in encodings:try:with open('data.csv', 'r', encoding=encoding) as file:reader = csv.reader(file)for row in reader:print(row)print(f"성공적인 인코딩: {encoding}")breakexcept UnicodeDecodeError:print(f"{encoding} 인코딩 실패, 다음 시도...")
큰 CSV 파일을 처리할 때는 메모리 효율성을 고려해야 합니다. 한 번에 모든 데이터를 메모리에 로드하지 않고 처리하는 방법입니다.
# 대용량 CSV 파일 처리def process_large_csv(filename):with open(filename, 'r', encoding='utf-8') as file:reader = csv.reader(file)header = next(reader)for i, row in enumerate(reader):# 행 단위 처리processed_row = process_row(row)# 1000행마다 진행 상황 출력if i % 1000 == 0:print(f"처리 중: {i}행")yield processed_rowdef process_row(row):# 개별 행 처리 로직return [cell.upper() if isinstance(cell, str) else cell for cell in row]
CSV 데이터를 필터링하거나 변환하는 실용적인 예제도 준비했습니다.
# 조건에 맞는 데이터 필터링def filter_csv(input_file, output_file, condition):with open(input_file, 'r', encoding='utf-8') as infile, \open(output_file, 'w', encoding='utf-8', newline='') as outfile:reader = csv.reader(infile)writer = csv.writer(outfile)# 헤더 복사header = next(reader)writer.writerow(header)# 조건에 맞는 행만 필터링for row in reader:if condition(row):writer.writerow(row)# 사용 예: 나이가 30 이상인 행만 필터링filter_csv('input.csv', 'filtered.csv', lambda row: int(row[1]) >= 30)
📣 지금 화제가 되고 있는 문화행사는 바로, 2025 헤이리 판 페스티벌를 참고해보세요.
CSV 파일 처리는 Python 프로그래밍에서 기본적이면서도 매우 중요한 기술입니다. 오늘 배운 csv.reader와 csv.writer, DictReader와 DictWriter를 잘 활용하면 다양한 데이터 처리 작업을 효율적으로 수행할 수 있습니다. 실제 프로젝트에서는 인코딩 문제, 대용량 파일 처리, 데이터 필터링 등 다양한 상황에 맞게 이러한 기술들을 적용해 보세요. 궁금한 점이 있으면 언제든지 댓글로 질문해 주시기 바랍니다. 다음 시간에는 더 흥미로운 Python 주제로 찾아뵙겠습니다. 코딩하는곰이었습니다!
🎭 문화와 예술을 가까이에서 느끼고 싶다면, 안심창조밸리 연꽃마을 축제를 참고해보세요.
