csv.DictReader în Python

CSV Python 3.0+ (rânduri ca dict: 3.8+)

Citește un CSV cu antet, fiecare rând ca dicționar {coloană: valoare}.

Sintaxă
csv.DictReader(fisier, fieldnames=None, restkey=None, restval=None, delimiter=",", ...)

Ce face csv.DictReader

DictReader folosește primul rând ca nume de coloane și dă fiecare rând următor ca dicționar, deci accesezi valorile după nume: rand["oras"]. Codul rămâne corect chiar dacă se schimbă ordinea coloanelor.

Dacă fișierul nu are antet, dai numele cu fieldnames. Valorile în plus ajung la cheia restkey, iar coloanele lipsă primesc restval.

Parametri

Parametru Descriere
fisier Fișierul deschis.
fieldnames Opțional. Numele coloanelor.
restkey, restval Tratarea rândurilor prea lungi sau prea scurte.

Ce returnează

Un iterator de dicționare.

Exemple

Exemplul 1: Calcule pe coloane cu nume

import csv
from collections import defaultdict
with open("vanzari.csv", "w", encoding="utf-8", newline="") as f:
    f.write("data,oras,suma\n2026-10-01,Iași,120\n2026-10-01,Cluj,80\n2026-10-02,Iași,50\n")
total = defaultdict(float)
with open("vanzari.csv", encoding="utf-8", newline="") as f:
    cititor = csv.DictReader(f)
    print(cititor.fieldnames)
    for rand in cititor:
        total[rand["oras"]] += float(rand["suma"])
print(dict(total))

Rezultat

['data', 'oras', 'suma']
{'Iași': 170.0, 'Cluj': 80.0}

Exemplul 2: Fără antet și rânduri incomplete

import csv
randuri = ["Ana,25", "Dan", "Ioana,31,extra"]
for r in csv.DictReader(randuri, fieldnames=["nume", "varsta"], restval="?", restkey="altele"):
    print(r)

Rezultat

{'nume': 'Ana', 'varsta': '25'}
{'nume': 'Dan', 'varsta': '?'}
{'nume': 'Ioana', 'varsta': '31', 'altele': ['extra']}

Greșeli frecvente

  • Fișierul are BOM (salvat din Excel) și prima coloană se numește "\ufeffdata", deci rand["data"] dă KeyError. Deschide-l cu encoding="utf-8-sig".

Comenzi înrudite

  • csv.reader(): Citește un fișier CSV rând cu rând, fiecare rând ca listă de texte.
  • csv.DictWriter: Scrie dicționare într-un CSV, cu coloanele în ordinea aleasă.
  • collections.defaultdict: Un dicționar care creează automat o valoare implicită pentru cheile lipsă.