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.
# 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 americanoIl 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.
# 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.
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.
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.DictReaderecsv.DictWriterlavorano con dizionari, più leggibili degli indici numerici - ●Aggiungi
newline=""quando scrivi CSV per evitare righe vuote su Windows