Parliamo

project-cherry.dev

Fondamenta9 min

File I/O

Impara a leggere e scrivere file di testo e CSV con Python, gestendo ordini e materiali come nella Bottega Artigiana Ferraro.

File I/O in Python

Ogni attività genera dati che devono essere salvati da qualche parte. La Bottega Artigiana Ferraro, ad esempio, tiene traccia dei materiali in magazzino e degli ordini dei clienti usando semplici file di testo e CSV. Python rende queste operazioni naturali e sicure grazie al costrutto with, che garantisce la chiusura automatica dei file anche in caso di errore.

Leggere un file di testo

Il primo passo è leggere una lista di materiali salvata in un file .txt. Ogni riga contiene un materiale disponibile in bottega.

python
# Leggiamo la lista materiali della bottega
with open("materiali.txt", "r", encoding="utf-8") as f:
    for riga in f:
        materiale = riga.strip()
        print(f"In magazzino: {materiale}")

# Output:
# In magazzino: Noce nazionale
# In magazzino: Rovere slavonia
# In magazzino: Ciliegio americano

Il metodo strip() rimuove spazi e caratteri di a capo dalla riga. Specificare encoding="utf-8" evita problemi con lettere accentate.

Scrivere un file

A fine giornata, il Sig. Ferraro genera un report con i lavori completati. Usiamo la modalità "w" per creare un nuovo file (sovrascrive se esiste) oppure "a" per aggiungere righe a un file esistente.

python
# Report giornaliero della bottega
lavori_completati = [
    "Restauro cassettone noce - Cliente Bianchi",
    "Verniciatura tavolo rovere - Cliente Moretti",
    "Preventivo libreria su misura - Cliente Conti",
]

with open("report_giornaliero.txt", "w", encoding="utf-8") as f:
    f.write("=== Report Bottega Ferraro ===\n\n")
    for lavoro in lavori_completati:
        f.write(f"- {lavoro}\n")
    f.write(f"\nTotale lavori: {len(lavori_completati)}\n")

print("Report salvato con successo")

Lavorare con CSV

I file CSV sono il formato più semplice per dati tabulari. La bottega li usa per tracciare gli ordini: ogni riga è un ordine con cliente, descrizione e importo.

python
import csv

# Leggere gli ordini della bottega
with open("ordini_bottega.csv", "r", encoding="utf-8") as f:
    lettore = csv.DictReader(f)
    totale_mese = 0
    for ordine in lettore:
        importo = float(ordine["importo"])
        totale_mese += importo
        print(f"Ordine {ordine['cliente']}: {ordine['descrizione']} - {importo:.2f} EUR")

    print(f"\nFatturato del mese: {totale_mese:.2f} EUR")

Scrivere un CSV

Quando il Sig. Ferraro chiude il mese, esporta un riepilogo degli ordini completati in un nuovo CSV da inviare al commercialista.

python
import csv

ordini_completati = [
    {"cliente": "Bianchi", "descrizione": "Restauro cassettone", "importo": 1200.00, "stato": "completato"},
    {"cliente": "Moretti", "descrizione": "Tavolo su misura", "importo": 2800.00, "stato": "completato"},
    {"cliente": "Conti", "descrizione": "Libreria noce", "importo": 3500.00, "stato": "completato"},
]

with open("report_mensile.csv", "w", newline="", encoding="utf-8") as f:
    campi = ["cliente", "descrizione", "importo", "stato"]
    scrittore = csv.DictWriter(f, fieldnames=campi)
    scrittore.writeheader()
    scrittore.writerows(ordini_completati)

print("Report mensile esportato")

Da ricordare

  • Usa sempre with open(...) per garantire la chiusura automatica del file
  • Specifica encoding="utf-8" per evitare problemi con caratteri accentati
  • csv.DictReader e csv.DictWriter lavorano con dizionari, più leggibili degli indici numerici
  • Aggiungi newline="" quando scrivi CSV per evitare righe vuote su Windows