Come leggere e analizzare un file CSV in Python

Scopri come leggere e analizzare i file CSV in Python utilizzando il modulo csv integrato. Padroneggia la lettura come elenchi, lettori di dizionari e delimitatori personalizzati.

Prova questa soluzione nell'editor

Panoramica

CSV (Comma-Separated Values) è un formato di file onnipresente per l'archiviazione di set di dati tabulari. Che si tratti di importare database, esportare fogli di calcolo o scaricare registri, la lettura di CSV è una competenza fondamentale. Python include un modulo `csv` integrato dedicato e altamente ottimizzato per analizzare facilmente i file CSV senza bisogno di librerie di terze parti come Panda.

La funzione `csv.reader` legge un file riga per riga e lo analizza, dividendo ogni riga in base alla virgola delimitatrice e restituendo elenchi di stringhe. Se il tuo file CSV ha una riga di intestazione (ad esempio, etichette di colonna), spesso è preferibile utilizzare `csv.DictReader`. Analizza automaticamente ogni riga in un dizionario in cui le chiavi sono le etichette delle colonne, rendendo il codice molto più leggibile e resistente ai cambiamenti nell'ordine delle colonne.

Quando si aprono file CSV, è consigliabile impostare `newline=""` nell'istruzione `open()`. Ciò impedisce a Python di eseguire traduzioni automatiche di fine riga, che possono portare a errori di analisi su alcuni sistemi operativi. Inoltre, specifica sempre `encoding="utf-8"` per gestire i caratteri speciali.

Codice e output di esecuzione

Questo script dimostra la scrittura di un file CSV di esempio e la sua lettura utilizzando sia csv.reader che csv.DictReader.

import csv

# Writing a sample CSV file
sample_content = [
    ["name", "role", "salary"],
    ["Alice", "Developer", "90000"],
    ["Bob", "Manager", "110000"]
]
with open("employees.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerows(sample_content)

# 1. Reading CSV using csv.reader (List representation)
print("--- Using csv.reader ---")
with open("employees.csv", "r", newline="", encoding="utf-8") as file:
    reader = csv.reader(file)
    header = next(reader) # Skip header row
    print("Header:", header)
    for row in reader:
         print(f"Employee: {row[0]} | Role: {row[1]}")

# 2. Reading CSV using csv.DictReader (Dictionary representation)
print("\n--- Using csv.DictReader ---")
with open("employees.csv", "r", newline="", encoding="utf-8") as file:
    dict_reader = csv.DictReader(file)
    for row in dict_reader:
         print(f"Name: {row['name']} | Role: {row['role']} | Salary: {row['salary']}")
Uscita terminale
--- Using csv.reader ---
Header: ['name', 'role', 'salary']
Employee: Alice | Role: Developer
Employee: Bob | Role: Manager

--- Using csv.DictReader ---
Name: Alice | Role: Developer | Salary: 90000
Name: Bob | Role: Manager | Salary: 110000

Implementazione passo dopo passo

  • Importa il modulo CSV integrato nel tuo script.
  • Apri il file CSV utilizzando open("employees.csv", "r", newline="", encoding="utf-8") come file.
  • Passa l'oggetto file a csv.reader(file) per analizzare le righe del file come elenchi di stringhe.
  • Utilizzare csv.DictReader(file) per analizzare le righe come mappature del dizionario corrispondenti alle intestazioni delle colonne.

Domande frequenti

Perché dovrei impostare newline="" quando apro un file CSV?

L'impostazione newline="" impedisce a Python di modificare dinamicamente i caratteri di fine riga, garantendo che il modulo csv possa analizzare correttamente i ritorni a capo in stile csv su diversi sistemi operativi.

Come posso analizzare un file CSV che utilizza tabulazioni o punti e virgola anziché virgole?

È possibile passare un delimitatore personalizzato alla funzione di lettura: csv.reader(file, delimiter="\t") o csv.reader(file, delimiter=";").

Argomenti correlati

Risorse Python consigliate

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