Guida completa su come scrivere dati riga per riga in un file CSV con Python

Python è un linguaggio di programmazione estremamente efficace per l’elaborazione dei dati e la gestione dei file CSV rientra in queste capacità. I file CSV sono ampiamente utilizzati per memorizzare e condividere dati. In questo articolo, spiegheremo in dettaglio come scrivere dati riga per riga in un file CSV utilizzando Python, fornendo esempi di codice concreti e casi d’uso avanzati. L’articolo è utile sia per principianti che per utenti avanzati, quindi assicurati di leggerlo fino alla fine.

Indice

Nozioni di base sulla gestione dei file CSV con Python

I file CSV (Comma-Separated Values) sono un formato semplice ed efficace per memorizzare dati in forma tabellare. Ogni riga rappresenta un record e ogni colonna rappresenta un campo dati. Python include un modulo standard chiamato “csv” che facilita la lettura e la scrittura dei file CSV.

Struttura dei file CSV

I file CSV sono costituiti da dati di testo separati da virgole come segue:

Nome, Età, Professione
Taro, 30, Ingegnere
Hanako, 25, Designer

Utilizzare il modulo csv di Python

Importando il modulo “csv” di Python, è possibile leggere e scrivere facilmente i file CSV. Di seguito è riportato il metodo di importazione di base:

import csv

Come scrivere dati in un file CSV

Per scrivere dati in un file CSV con Python, si utilizza principalmente la classe “csv.writer”. Questa classe consente di scrivere dati in modo efficiente in un file CSV.

Procedura di base per scrivere in un file CSV

Vediamo prima i passaggi di base per scrivere in un file CSV. Segui questi step:

  1. Aprire il file CSV
  2. Creare un oggetto csv.writer
  3. Scrivere i dati utilizzando il metodo writerow
  4. Chiudere il file

Aprire il file CSV

Per aprire un file CSV, si utilizza la funzione incorporata “open” di Python. Per aprire il file in modalità scrittura, si specifica “w”:

with open('example.csv', mode='w', newline='') as file:
    writer = csv.writer(file)

Creare un oggetto csv.writer

La creazione di un oggetto csv.writer prepara il file per la scrittura dei dati. Questo oggetto viene creato passando un oggetto file come argomento.

    writer = csv.writer(file)

Scrivere i dati con il metodo writerow

Utilizza il metodo writerow per scrivere i dati in formato lista riga per riga. Ecco un esempio:

    writer.writerow(['Nome', 'Età', 'Professione'])
    writer.writerow(['Taro', '30', 'Ingegnere'])
    writer.writerow(['Hanako', '25', 'Designer'])

Chiudere il file

Quando hai finito di lavorare con il file, assicurati di chiuderlo. Utilizzando la sintassi with, il file viene chiuso automaticamente.

with open('example.csv', mode='w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Nome', 'Età', 'Professione'])
    writer.writerow(['Taro', '30', 'Ingegnere'])
    writer.writerow(['Hanako', '25', 'Designer'])


a5

Tipi di modalità di scrittura nei file CSV

Quando si scrivono dati in un file CSV con Python, è importante selezionare la modalità di scrittura appropriata. Esistono principalmente due modalità di scrittura: “modalità di aggiunta” e “modalità di sovrascrittura”, che devono essere scelte in base alle esigenze specifiche.

Modalità di sovrascrittura (‘w’)

La modalità di sovrascrittura viene utilizzata quando si desidera sovrascrivere un file esistente con nuovi contenuti. Aprendo un file in questa modalità, tutti i dati esistenti verranno cancellati e verranno scritti solo i nuovi dati.

with open('example.csv', mode='w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Nome', 'Età', 'Professione'])
    writer.writerow(['Taro', '30', 'Ingegnere'])

Modalità di aggiunta (‘a’)

La modalità di aggiunta viene utilizzata quando si desidera aggiungere dati a un file esistente. Aprendo un file in questa modalità, i dati esistenti rimarranno invariati e i nuovi dati verranno aggiunti alla fine del file.

with open('example.csv', mode='a', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Hanako', '25', 'Designer'])

Punti chiave per la scelta della modalità

  • Modalità di sovrascrittura è utile quando si vuole sostituire completamente il file esistente con un nuovo set di dati, ad esempio quando si aggiorna il file ogni giorno con i dati più recenti.
  • Modalità di aggiunta è utile quando si vogliono mantenere i dati esistenti e aggiungere nuovi dati, ad esempio per file di log o raccolta dati continua.

Esempio completo di codice

Di seguito sono riportati esempi che mostrano come utilizzare la modalità di sovrascrittura e la modalità di aggiunta:

import csv

# Scrivere nuovi dati in modalità di sovrascrittura
with open('example.csv', mode='w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Nome', 'Età', 'Professione'])
    writer.writerow(['Taro', '30', 'Ingegnere'])

# Aggiungere dati in modalità di aggiunta
with open('example.csv', mode='a', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Hanako', '25', 'Designer'])

Eseguendo questo codice, il file example.csv verrà sovrascritto con i nuovi dati, dopodiché verranno aggiunti ulteriori dati.

Esempi pratici di codice e spiegazione

Qui mostriamo esempi pratici di come scrivere dati in un file CSV utilizzando Python e spieghiamo in dettaglio il loro funzionamento. Questo ti aiuterà a comprendere meglio l’uso di base e avanzato.

Esempio di scrittura di base

Cominciamo con un semplice esempio di scrittura, in cui scriviamo dati semplici in un file CSV.

import csv

data = [
    ['Nome', 'Età', 'Professione'],
    ['Taro', '30', 'Ingegnere'],
    ['Hanako', '25', 'Designer']
]

with open('example.csv', mode='w', newline='') as file:
    writer = csv.writer(file)
    for row in data:
        writer.writerow(row)

Questo codice funziona come segue:

  1. Apre il file CSV in modalità “w”. Questo crea un nuovo file o sovrascrive un file esistente.
  2. Crea un oggetto csv.writer.
  3. Utilizza il metodo writerow per scrivere i dati in formato lista riga per riga nel file.

Esempio di scrittura in formato dizionario

Mostriamo ora un esempio di scrittura di dati in formato dizionario in un file CSV. Questo metodo consente di utilizzare le chiavi come intestazioni.

import csv

data = [
    {'Nome': 'Taro', 'Età': '30', 'Professione': 'Ingegnere'},
    {'Nome': 'Hanako', 'Età': '25', 'Professione': 'Designer'}
]

with open('example_dict.csv', mode='w', newline='') as file:
    fieldnames = ['Nome', 'Età', 'Professione']
    writer = csv.DictWriter(file, fieldnames=fieldnames)

    writer.writeheader()
    for row in data:
        writer.writerow(row)

Punti chiave di questo codice:

  1. Utilizza DictWriter per scrivere dati in formato dizionario nel file CSV.
  2. Specifica i fieldnames per definire le intestazioni.
  3. Scrive le intestazioni con il metodo writeheader.
  4. Scrive i dati riga per riga utilizzando il metodo writerow.

Esempio di aggiunta di dati

Mostriamo un esempio su come aggiungere dati a un file CSV esistente. In questo caso, si utilizza la modalità “a”.

import csv

additional_data = [
    ['Jiro', '28', 'Marketing'],
    ['Saburo', '35', 'Project Manager']
]

with open('example.csv', mode='a', newline='') as file:
    writer = csv.writer(file)
    for row in additional_data:
        writer.writerow(row)

Punti chiave di questo codice:

  1. Il file viene aperto in modalità “a” per mantenere i dati esistenti e aggiungere nuovi dati.
  2. Aggiunge i nuovi dati riga per riga.

Questi esempi ti permettono di apprendere i metodi di base e avanzati per scrivere dati in file CSV utilizzando Python.

Esempio avanzato: Scrivere più dati in sequenza

Nelle applicazioni reali, spesso è necessario gestire grandi quantità di dati e scriverli in sequenza. Qui presentiamo un esempio avanzato su come scrivere più dati in un file CSV con Python.

Scrittura di dati dinamici

Mostriamo un esempio su come scrivere dati generati dinamicamente in un file CSV. Questo metodo è utile per la raccolta di dati o la registrazione dei log.

import csv
import random
import time

# Funzione per generare dati fittizi
def generate_data():
    names = ['Taro', 'Hanako', 'Jiro', 'Saburo']
    ages = range(20, 40)
    professions = ['Ingegnere', 'Designer', 'Marketing', 'Project Manager']

    return {
        'Nome': random.choice(names),
        'Età': random.choice(ages),
        'Professione': random.choice(professions)
    }

# Funzione per scrivere dati nel file CSV
def write_data_to_csv(file_name, data):
    with open(file_name, mode='a', newline='') as file:
        fieldnames = ['Nome', 'Età', 'Professione']
        writer = csv.DictWriter(file, fieldnames=fieldnames)

        # Scrivi l'intestazione solo se il file è vuoto
        if file.tell() == 0:
            writer.writeheader()

        writer.writerow(data)

# Genera dati continuamente e scrivili nel file CSV
file_name = 'dynamic_data.csv'
for _ in range(10):  # Qui genera e scrive dati 10 volte
    data = generate_data()
    write_data_to_csv(file_name, data)
    time.sleep(1)  # Genera dati a intervalli di 1 secondo

Punti chiave di questo codice:

  1. La funzione generate_data genera dati fittizi.
  2. La funzione write_data_to_csv scrive i dati nel file CSV, controllando se è necessario scrivere l’intestazione.
  3. I dati vengono generati continuamente e scritti nel file CSV con intervalli di 1 secondo.

Filtraggio dei dati e scrittura

Mostriamo un esempio di filtraggio dei dati in base a determinate condizioni e scrittura dei soli dati filtrati nel file CSV.

import csv

# Dati di esempio
data = [
    {'Nome': 'Taro', 'Età': 30, 'Professione': 'Ingegnere'},
    {'Nome': 'Hanako', 'Età': 25, 'Professione': 'Designer'},
    {'Nome': 'Jiro', 'Età': 28, 'Professione': 'Marketing'},
    {'Nome': 'Saburo', 'Età': 35, 'Professione': 'Project Manager'}
]

# Funzione di filtraggio
def filter_data(data, age_threshold):
    return [row for row in data if row['Età'] > age_threshold]

# Scrivere i dati filtrati
filtered_data = filter_data(data, 30)

with open('filtered_data.csv', mode='w', newline='') as file:
    fieldnames = ['Nome', 'Età', 'Professione']
    writer = csv.DictWriter(file, fieldnames=fieldnames)

    writer.writeheader()
    for row in filtered_data:
        writer.writerow(row)

Punti chiave di questo codice:

  1. La funzione filter_data filtra i dati in base all’età, selezionando solo quelli superiori a 30 anni.
  2. Scrive i dati filtrati nel file CSV.

Questi esempi avanzati ti aiuteranno a comprendere come eseguire operazioni più complesse e migliorare le tue abilità di elaborazione dei dati con Python.

Errori comuni e soluzioni

Quando si scrivono file CSV, possono verificarsi alcuni errori comuni. Qui descriviamo i principali errori e come risolverli.

PermissionError (Errore di autorizzazione)

Questo errore si verifica se il file è aperto o utilizzato da un altro processo.

import csv

try:
    with open('example.csv', mode='w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(['Nome', 'Età', 'Professione'])
        writer.writerow(['Taro', '30', 'Ingegnere'])
except PermissionError:
    print("Impossibile accedere al file. Verifica che il file non sia utilizzato da altri programmi.")

Soluzioni:

  • Assicurati che il file non sia aperto in altri programmi.
  • Controlla le autorizzazioni del file.

FileNotFoundError (Errore di file non trovato)

Questo errore si verifica quando si tenta di scrivere in una directory inesistente.

import csv

try:
    with open('nonexistent_directory/example.csv', mode='w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(['Nome', 'Età', 'Professione'])
        writer.writerow(['Taro', '30', 'Ingegnere'])
except FileNotFoundError:
    print("La directory specificata non esiste. Controlla la directory.")

Soluzioni:

  • Verifica che il percorso del file sia corretto.
  • Crea la directory se necessario.

csv.Error (Errore del modulo CSV)

Questo errore si verifica quando il formato dei dati è errato durante l’uso del modulo csv.

import csv

try:
    with open('example.csv', mode='w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(['Nome', 'Età', 'Professione'])
        writer.writerow(['Taro', '30', 'Ingegnere'])
        writer.writerow(['Hanako', '25', 'Designer'])
except csv.Error as e:
    print(f"Si è verificato un errore durante l'elaborazione del file CSV: {e}")

Soluzioni:

  • Verifica che il formato dei dati sia corretto.
  • Controlla se i dati contengono caratteri di controllo specifici o codifiche errate.

UnicodeEncodeError (Errore di codifica)

Questo errore si verifica quando si tenta di scrivere caratteri speciali o dati con una codifica diversa.

import csv

try:
    with open('example.csv', mode='w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow(['Nome', 'Età', 'Professione'])
        writer.writerow(['Taro', '30', 'Ingegnere'])
except UnicodeEncodeError as e:
    print(f"Si è verificato un errore di codifica: {e}")

Soluzioni:

  • Specifica la codifica appropriata (ad esempio, UTF-8).
  • Verifica se i dati contengono caratteri speciali.

Esempio di gestione degli errori

Di seguito è riportato un esempio di gestione degli errori per gestire più tipi di errori:

import csv

data = [
    ['Nome', 'Età', 'Professione'],
    ['Taro', '30', 'Ingegnere'],
    ['Hanako', '25', 'Designer']
]

try:
    with open('example.csv', mode='w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        for row in data:
            writer.writerow(row)
except PermissionError:
    print("Impossibile accedere al file. Verifica che il file non sia utilizzato da altri programmi.")
except FileNotFoundError:
    print("La directory specificata non esiste. Controlla la directory.")
except csv.Error as e:
    print(f"Si è verificato un errore durante l'elaborazione del file CSV: {e}")
except UnicodeEncodeError as e:
    print(f"Si è verificato un errore di codifica: {e}")

Utilizza queste soluzioni per gestire gli errori e garantire che il processo di scrittura nei file CSV proceda senza problemi.

Esercizi: Prova a scrivere i tuoi dati

Ecco alcuni esercizi per mettere in pratica ciò che hai imparato e migliorare la tua comprensione della scrittura di file CSV con Python.

Esercizio 1: Scrittura di dati di base

Segui questi passaggi per scrivere i dati di base in un file CSV.

  1. Scrivi un codice per scrivere i seguenti dati in un file CSV.
  2. Il nome del file deve essere “students.csv”.

Dati:

Nome, Classe, Voto
Tanaka, 1, A
Sato, 2, B
Suzuki, 3, A
import csv

data = [
    ['Nome', 'Classe', 'Voto'],
    ['Tanaka', '1', 'A'],
    ['Sato', '2', 'B'],
    ['Suzuki', '3', 'A']
]

with open('students.csv', mode='w', newline='') as file:
    writer = csv.writer(file)
    for row in data:
        writer.writerow(row)

Esercizio 2: Scrittura di dati in formato dizionario

Prova a scrivere i dati in formato dizionario in un file CSV.

  1. Scrivi i seguenti dati in un file chiamato “products.csv”.

Dati:

data = [
    {'Nome prodotto': 'Quaderno', 'Prezzo': '100', 'Stock': '50'},
    {'Nome prodotto': 'Penna', 'Prezzo': '50', 'Stock': '100'},
    {'Nome prodotto': 'Gomma', 'Prezzo': '30', 'Stock': '200'}
]
import csv

data = [
    {'Nome prodotto': 'Quaderno', 'Prezzo': '100', 'Stock': '50'},
    {'Nome prodotto': 'Penna', 'Prezzo': '50', 'Stock': '100'},
    {'Nome prodotto': 'Gomma', 'Prezzo': '30', 'Stock': '200'}
]

with open('products.csv', mode='w', newline='') as file:
    fieldnames = ['Nome prodotto', 'Prezzo', 'Stock']
    writer = csv.DictWriter(file, fieldnames=fieldnames)

    writer.writeheader()
    for row in data:
        writer.writerow(row)

Esercizio 3: Aggiungere dati dinamicamente

Aggiungi dati generati dinamicamente a un file CSV esistente.

  1. Utilizza il seguente codice per generare e aggiungere dati casuali di 10 utenti a “users.csv”.

Codice per generare i dati:

import csv
import random

names = ['Yamada', 'Ito', 'Takahashi', 'Kobayashi', 'Saito']
ages = range(20, 50)

def generate_user_data():
    return {'Nome': random.choice(names), 'Età': random.choice(ages)}

with open('users.csv', mode='a', newline='', encoding='utf-8') as file:
    fieldnames = ['Nome', 'Età']
    writer = csv.DictWriter(file, fieldnames=fieldnames)

    # Scrivi l'intestazione solo se il file è vuoto
    if file.tell() == 0:
        writer.writeheader()

    for _ in range(10):
        writer.writerow(generate_user_data())

Metti in pratica ciò che hai imparato con questi esercizi e migliora le tue competenze nella gestione dei file CSV con Python.

Conclusione

In questo articolo, abbiamo spiegato in dettaglio come scrivere dati riga per riga in un file CSV utilizzando Python, partendo dalle operazioni di base fino agli esempi avanzati e alla gestione degli errori. Ecco i punti chiave:

Operazioni di base

  • Utilizzando il modulo standard “csv” di Python, la lettura e la scrittura di file CSV diventano facili.
  • Puoi utilizzare l’oggetto csv.writer per scrivere dati e l’oggetto csv.DictWriter per scrivere dati in formato dizionario.

Scelta della modalità di scrittura

  • È importante scegliere la modalità corretta tra sovrascrittura (‘w’) e aggiunta (‘a’).
  • La modalità di sovrascrittura sostituisce i dati esistenti, mentre la modalità di aggiunta conserva i dati e aggiunge nuove informazioni.

Gestione degli errori

  • Potrebbero verificarsi errori come PermissionError, FileNotFoundError, csv.Error e UnicodeEncodeError durante la scrittura dei file CSV.
  • Implementa una gestione degli errori appropriata per assicurarti che il programma sia robusto.

Pratica e applicazioni

  • Hai imparato a gestire dati generati dinamicamente e grandi volumi di dati in modo efficiente.
  • Hai messo in pratica l’elaborazione avanzata dei dati, come la scrittura di dati in formato dizionario e il filtraggio dei dati.

Utilizza queste conoscenze per migliorare le tue capacità nella gestione dei dati e nelle operazioni con i file in Python. La gestione dei file CSV è una competenza fondamentale per molte attività di elaborazione dei dati.

Indice