Code Reference

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

APIRole
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 / writerowsOne / many rows
writeheader()Emit header for DictWriter
dialect / delimiterCSV flavor (excel, ;, etc.)
csv.QUOTE_MINIMALQuoting 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.
  • DictWriter needs fieldnames; missing keys become empty cells unless extrasaction="raise".
  • Excel may expect BOM / ; — test with the consumer.
  • Nested commas need quoting; let csv handle it — don’t hand-split lines.

On this page