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", decirand["data"]dăKeyError. Deschide-l cuencoding="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ă.