La Libreria CSV in Python
La libreria csv di Python fornisce funzionalità per lavorare con file CSV (Comma Separated Values), permettendo di leggere, scrivere e manipolare dati tabulari in modo semplice ed efficace.
La libreria è inclusa nella libreria standard di Python: non è necessario installare nulla.
import csv
Gli esempi di questa guida utilizzano un file studenti.csv con le colonne: matricola, cognome, nome, esame, voto.
Lettura con csv.reader
csv.reader restituisce un iteratore che fornisce una lista per ogni riga del file.
import csv
with open('studenti.csv', mode='r', newline='') as file:
lettore_csv = csv.reader(file)
intestazione = next(lettore_csv) # salta l'intestazione
for riga in lettore_csv:
print(riga)
# riga è una lista: ['12345', 'Rossi', 'Mario', 'Matematica', '28']
next(lettore_csv)legge e scarta la prima riga (intestazione)- Ogni riga successiva viene restituita come lista di stringhe
Scrittura con csv.writer
csv.writer permette di scrivere righe in un file CSV.
import csv
dati_studenti = [
['12345', 'Rossi', 'Mario', 'Matematica', '28'],
['67890', 'Bianchi', 'Luca', 'Fisica', '30'],
['54321', 'Verdi', 'Anna', 'Chimica', '27'],
]
with open('studenti_scritti.csv', mode='w', newline='') as file:
scrittore_csv = csv.writer(file)
scrittore_csv.writerow(['matricola', 'cognome', 'nome', 'esame', 'voto'])
scrittore_csv.writerows(dati_studenti)
| Metodo | Descrizione |
|---|---|
writerow(lista) | Scrive una singola riga |
writerows(lista_di_liste) | Scrive più righe in un’unica chiamata |
Lettura come dizionario con DictReader
DictReader legge ogni riga come un dizionario, usando la prima riga del file come chiavi.
import csv
with open('studenti.csv', mode='r', newline='') as file:
lettore_csv = csv.DictReader(file)
for riga in lettore_csv:
print(riga['matricola'], riga['cognome'], riga['nome'],
riga['esame'], riga['voto'])
Ogni riga è un dizionario del tipo:
{'matricola': '12345', 'cognome': 'Rossi', 'nome': 'Mario', 'esame': 'Matematica', 'voto': '28'}
Leggere un CSV senza intestazione
Se il file non ha un’intestazione, si specificano manualmente i nomi delle colonne con fieldnames:
import csv
campi = ['matricola', 'cognome', 'nome', 'esame', 'voto']
with open('studenti_senza_intestazione.csv', mode='r', newline='') as file:
lettore_csv = csv.DictReader(file, fieldnames=campi)
for riga in lettore_csv:
print(riga['matricola'], riga['cognome'], riga['nome'])
Scrittura da dizionario con DictWriter
DictWriter scrive righe a partire da dizionari.
import csv
dati_studenti = [
{'matricola': '12345', 'cognome': 'Rossi', 'nome': 'Mario', 'esame': 'Matematica', 'voto': '28'},
{'matricola': '67890', 'cognome': 'Bianchi', 'nome': 'Luca', 'esame': 'Fisica', 'voto': '30'},
{'matricola': '54321', 'cognome': 'Verdi', 'nome': 'Anna', 'esame': 'Chimica', 'voto': '27'},
]
campi = ['matricola', 'cognome', 'nome', 'esame', 'voto']
with open('studenti_scritti_dict.csv', mode='w', newline='') as file:
scrittore_csv = csv.DictWriter(file, fieldnames=campi)
scrittore_csv.writeheader() # scrive la riga di intestazione
scrittore_csv.writerows(dati_studenti)
Riepilogo classi e metodi
| Classe / Funzione | Uso | Tipo di dato |
|---|---|---|
csv.reader(file) | Lettura riga per riga | Lista per riga |
csv.writer(file) | Scrittura riga per riga | Lista per riga |
csv.DictReader(file) | Lettura con chiavi colonna | Dizionario per riga |
csv.DictWriter(file, fieldnames) | Scrittura da dizionari | Dizionario per riga |
Metodi writer
| Metodo | Descrizione |
|---|---|
writerow(row) | Scrive una riga (lista o dizionario) |
writerows(rows) | Scrive più righe |
writeheader() | Scrive la riga di intestazione (DictWriter) |
Note pratiche
- Usare sempre
newline=''nell’apertura del file per evitare righe vuote su Windows. - La modalità
'w'sovrascrive il file; usare'a'per aggiungere in coda. - I valori sono sempre stringhe: convertire esplicitamente con
int()ofloat()se necessario.
for riga in lettore_csv:
voto = int(riga['voto'])
print(f"{riga['nome']} {riga['cognome']}: {voto}/30")
EC