Csv
Python · Reference cheat sheet
Csv
Python · Reference cheat sheet
📋 Overview
The stdlib csv module reads and writes delimited text. Use DictReader/DictWriter when rows have named columns; plain reader/writer for positional fields. Prefer newline="" when opening files on Windows.
🔧 Core concepts
| API | Role |
|---|---|
csv.reader(f) | Iterate rows as lists |
csv.DictReader(f) | Rows as dict (header → value) |
csv.writer(f) | Write list rows |
csv.DictWriter(f, fieldnames) | Write dict rows |
writerow / writerows | One / many rows |
writeheader() | Emit header for DictWriter |
dialect / delimiter | CSV flavor (excel, ;, etc.) |
csv.QUOTE_MINIMAL | Quoting strategy |
For large analytics, use Pandas read_csv instead.
💡 Examples
DictReader:
import csv
from pathlib import Path
with Path("people.csv").open(newline="", encoding="utf-8") as f:
for row in csv.DictReader(f):
print(row["name"], row["age"])reader (lists):
import csv
with open("data.csv", newline="", encoding="utf-8") as f:
rows = list(csv.reader(f))
header, *body = rows
print(header, body[:2])DictWriter:
import csv
from pathlib import Path
fields = ["name", "age"]
rows = [{"name": "Ada", "age": 36}, {"name": "Lin", "age": 41}]
with Path("out.csv").open("w", newline="", encoding="utf-8") as f:
w = csv.DictWriter(f, fieldnames=fields)
w.writeheader()
w.writerows(rows)Custom delimiter:
import csv
with open("eu.csv", newline="", encoding="utf-8") as f:
for row in csv.reader(f, delimiter=";"):
print(row)⚠️ Pitfalls
- Always open with
newline=""so the csv module owns line endings. - Pass
encoding="utf-8"(or the real encoding) — never rely on locale default. DictWriterneedsfieldnames; missing keys become empty cells unlessextrasaction="raise".- Excel may expect BOM /
;— test with the consumer. - Nested commas need quoting; let
csvhandle it — don’t hand-split lines.