[Python] CSV 파일 읽고 쓰기 - csv.reader, DictReader, DictWriter
by 우와한개발자
[ CSV 파일 읽고 쓰기 ]
1. CSV 파일이란?
- CSV(Comma Separated Values) : 스프레드시트나 데이터베이스를 가져오거나 내보낼 때 가장 많이 사용하는 형식
- 일반적으로 쉼표(,)로 구분하나 간혹 세미콜론(;)으로 구분된 경우도 있음
- 문자열은 쌍따옴표로 묶여있는 경우가 많음
- 파이썬 기본 라이브러리에 csv 모듈이 포함되어 있으나 요즘은 주로 판다스(Pandas)를 사용
2. CSV 읽기
1) csv.reader()
- 지정된 파일에서 행 단위로 데이터를 읽어 리스트로 반환
import csv
with open('data.csv', 'r') as f:
reader = csv.reader(f, quotechar='"', quoting=csv.QUOTE_NONNUMERIC)
for row in reader:
print(row)
- quotechar : 문자열을 묶는 따옴표 기호 지정
- quoting=csv.QUOTE_NONNUMERIC : 따옴표로 묶이지 않은 값은 숫자(float)로 변환하여 읽음
2)csv.DictReader()
- 첫 번째 행을 키(메타정보)로 사용하여 각 행을 딕셔너리로 반환
with open('data.csv', 'r') as f:
reader = csv.DictReader(f)
for row in reader:
print(row) # {'name': '홍길동', 'age': '30'}
- fieldnames : 헤더 행이 없는 경우 직접 필드명 지정
- restkey : 필드 수보다 데이터가 많은 경우 남는 데이터를 지정한 키에 리스트로 저장
# CSV 내용
# name, age
# 홍길동, 30, 서울, 개발자 ← 필드(2개)보다 데이터(4개)가 많은 경우
with open('data.csv', 'r') as f:
reader = csv.DictReader(f, restkey='extra')
for row in reader:
print(row)
# {'name': '홍길동', 'age': '30', 'extra': ['서울', '개발자']}
- restval : 필드 수보다 데이터가 적은 경우 빈 값의 기본값 지정
# CSV 내용
# name, age, address
# 홍길동, 30 ← 필드(3개)보다 데이터(2개)가 적은 경우
with open('data.csv', 'r') as f:
reader = csv.DictReader(f, restval='없음')
for row in reader:
print(row)
# {'name': '홍길동', 'age': '30', 'address': '없음'}
3. CSV 쓰기
1) csv.writer()
with open('output.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['name', 'age']) # 단일 행 쓰기
writer.writerows([['홍길동', 30], ['김철수', 25]]) # 여러 행 쓰기
2) csv.DictWriter()
- 딕셔너리 데이터를 행별로 CSV에 저장
with open('output.csv', 'w', newline='') as f:
fieldnames = ['name', 'age']
writer = csv.DictWriter(f, fieldnames=fieldnames, extrasaction='ignore')
writer.writeheader()
writer.writerow({'name': '홍길동', 'age': 30}) # 단일 행
writer.writerows([{'name': '김철수', 'age': 25}, ...]) # 여러 행
- DictWriter는 저장할 컬럼을 fieldnames 로 미리 지정해두는데, 딕셔너리에 fieldnames에 없는 키가 있으면 기본적으로 에러가 발생
- extrasaction='ignore' : fieldnames에 없는 키가 있어도 예외 발생 없이 무시
'언어 > Python' 카테고리의 다른 글
| [Python] 오라클 DB 연결 - pip install oracledb / Connect, Cursor, Row 객체 (0) | 2026.04.19 |
|---|---|
| [Python] JSON 파일 읽고 쓰기 - json.dump/load, HDF5, 파일 형식 비교 (0) | 2026.04.19 |
| [Python] 파일 읽고 쓰기 - %%writefile, open(), read/write, 피클(pickle) (0) | 2026.04.19 |
| [Python] 예외처리 - try/except, raise, 추상클래스, 사용자 정의 예외 (0) | 2026.04.19 |
| [Python] 클래스 상속 - super(), 메서드 재정의, name mangling(_클래스명__변수명) (0) | 2026.04.19 |
블로그의 정보
우와한개발자 님의 블로그
우와한개발자