csv 모듈이 각 연산의 두 맛 줘. csv.reader / csv.writer 가 list 로서의 row 와 작동. csv.DictReader / csv.DictWriter 가 헤더 줄 키로 dict 로서의 row 와 작동. Dict 변형이 거의 항상 원하는 거 — 코드가 컬럼 인덱스보다 필드 이름으로 더 잘 읽혀.
newline 인자 — 항상 초보 거는 거
CSV 파일은 항상 newline='' 으로 열어. CSV 파일은 자기 줄바꿈 컨벤션 가지고 있고 Python 의 텍스트 모드 줄바꿈 변환이 간섭. 빈 문자열이 변환 비활성화 — csv 모듈이 자기 거 처리. 까먹으면 Windows 에서 빈 row 추가 또는 멀티라인 셀 망가짐.
Quoting — 콤마와 줄바꿈이 셀 안에 숨을 때
CSV 의 핵심 기능 — 셀이 콤마, 줄바꿈, 따옴표 포함 가능. 셀 주위 따옴표가 그 글자들 박는 걸 허용. 따옴표 안 더블 따옴표 = 리터럴 따옴표. csv 모듈이 다 처리 — 사용해야만. "콤마로 split" 직접 짜지 마.
dialect 파라미터 — 다른 CSV 가 다른 거
Excel 이 , 구분자. 유럽 Excel 은 종종 ;. 일부 도구는 \t (TSV). dialect 인자 또는 delimiter/quotechar/quoting kwarg 로 처리. csv.Sniffer 가 샘플에서 dialect 추측 가능.
주의: 데이터가 100KB 넘고 약간의 특이점 있으면 pandas.read_csv 로 전환이 보통 맞음. stdlib csv 는 작은 파일 + 코드 많은 처리용, pandas 는 대량 데이터 작업용.
Code
DictReader — row 를 dict 로·python
import csv
import io
data = '''name,age,role
alice,30,admin
bob,25,member
charlie,35,member'''
# 데모용 문자열 읽기, 파일 객체와도 같음
reader = csv.DictReader(io.StringIO(data))
for row in reader:
print(row)
# {'name': 'alice', 'age': '30', 'role': 'admin'}
# {'name': 'bob', 'age': '25', 'role': 'member'}
# {'name': 'charlie', 'age': '35', 'role': 'member'}
# 주의 — 모든 값이 문자열, 필요 시 수동 변환
rows = list(csv.DictReader(io.StringIO(data)))
for row in rows:
row["age"] = int(row["age"])
책 (title, author, year, price) 의 dict 셋 list. csv.DictWriter + newline='' 로 /tmp/books.csv 에 쓰기. 최소 한 title 에 콤마, 최소 하나에 em-dash 또는 다른 유니코드. csv.DictReader 로 다시 읽고 모든 레코드가 원본 매치 (CSV 가 모든 값 문자열로 — year + price 다시 변환).
Progress
Progress is local-only — sign in to sync across devices.