Python CSV: leggere e scrivere fogli di calcolo

Scopri come gestire i dati CSV in Python. Master csv.reader, csv.writer e DictReader/DictWriter per un'analisi efficiente delle tabelle.

Prova nell'editor

Panoramica

CSV (Comma-Separated Values) è un formato onnipresente per l'esportazione e l'importazione di dati da fogli di calcolo e database relazionali. Poiché i file CSV sono semplici file di testo, sono universalmente supportati da strumenti analitici, piattaforme di database e linguaggi di programmazione. Python dispone di un modulo `csv` integrato specificatamente ottimizzato per l'analisi, la scrittura e la manipolazione di dati tabulari senza bisogno di librerie di terze parti come Panda.

Il modulo csv fornisce due interfacce principali: lettori/scrittori basati su elenchi e lettori/scrittori basati su dizionario. `csv.reader()` e `csv.writer()` rappresentano ogni riga nel CSV come un elenco di stringhe, il che è semplice ma richiede il riferimento alle colonne tramite il loro indice numerico. Per un approccio più efficace, gli sviluppatori utilizzano `csv.DictReader()` e `csv.DictWriter()`. Queste classi associano ogni riga a un dizionario utilizzando la riga di intestazione CSV come chiavi, producendo codice altamente leggibile che non si interrompe se le colonne vengono riordinate.

Quando si ha a che fare con file CSV, i dettagli della sintassi sono importanti. Programmi diversi utilizzano delimitatori diversi (come tabulazioni o punti e virgola) e gestiscono virgolette o terminazioni di riga in modi distinti. Il modulo `csv` ti consente di definire delimitatori personalizzati, regole di virgolette e caratteri di escape tramite un parametro 'dialetto'. Inoltre, quando si aprono file CSV in Python, è un requisito fondamentale passare `newline=''` alla funzione `open()` per evitare problemi di righe vuote su diversi sistemi operativi.

Codice e output di esecuzione

Scrittura di dati in un file CSV utilizzando DictWriter e rilettura con DictReader.

import csv

filename = "employees.csv"
fieldnames = ["id", "name", "department"]
data = [
    {"id": "101", "name": "Bob", "department": "HR"},
    {"id": "102", "name": "Alice", "department": "Engineering"}
]

# Write dict data to CSV
with open(filename, "w", newline="") as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(data)

print("CSV written successfully.\n--- Reading CSV ---")

# Read CSV data back as dictionaries
with open(filename, "r", newline="") as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(f"Employee {row['name']} works in {row['department']}.")
Uscita terminale
CSV written successfully.
--- Reading CSV ---
Employee Bob works in HR.
Employee Alice works in Engineering.

Implementazione passo dopo passo

  • Esportazione di record di fogli di calcolo per l'analisi finanziaria
  • Importazione di cataloghi di elenchi di contatti nei database
  • Formattazione di output statistici da script computazionali

Domande frequenti

Perché devo specificare newline="" quando apro un file CSV?

Ciò è richiesto dallo scrittore interno del modulo csv per impedire l'inserimento di righe vuote aggiuntive, in particolare su piattaforme Windows.

Come posso analizzare un file CSV che utilizza tabulazioni anziché virgole?

Puoi passare il parametro delimitatore al lettore o allo scrittore, ad esempio csv.reader(file, delimiter='\t').

Argomenti correlati

Risorse Python consigliate

Espandi le tue conoscenze con tutorial interattivi, foglietti illustrativi e confronti di codici correlati.