Quasi ogni programma reale legge o scrive dati su file. Python rende queste operazioni molto semplici con funzioni integrate per leggere testo, scrivere risultati, gestire errori e lavorare con formati comuni come CSV e JSON.
Aprire un file con open()
La funzione open() apre un file e restituisce un oggetto file. Devi specificare il nome del file e la modalità di apertura.
| Modalità | Significato | Note |
|---|---|---|
| “r” | Lettura (default) | Errore se il file non esiste |
| “w” | Scrittura | Crea il file o lo sovrascrive |
| “a” | Append (aggiunta) | Aggiunge in fondo senza cancellare |
| “x” | Crea nuovo file | Errore se il file esiste già |
| “r+” | Lettura e scrittura | Il file deve esistere |
# Modo classico — ricorda di chiudere il file! f = open("dati.txt", "r", encoding="utf-8") contenuto = f.read() f.close() # Modo consigliato — with open() chiude automaticamente with open("dati.txt", "r", encoding="utf-8") as f: contenuto = f.read() # il file è già chiuso qui — anche in caso di errore
encoding="utf-8" per gestire correttamente caratteri accentati in italiano.
Leggere file di testo
# Legge tutto il file come stringa with open("articolo.txt", "r", encoding="utf-8") as f: testo = f.read() print(testo) # Legge riga per riga — efficiente per file grandi with open("articolo.txt", "r", encoding="utf-8") as f: for riga in f: print(riga.strip()) # .strip() rimuove \n finale # Legge tutte le righe in una lista with open("articolo.txt", "r", encoding="utf-8") as f: righe = f.readlines() # lista di righe con \n righe = f.read().splitlines() # lista senza \n (meglio)
Scrivere file di testo
# Scrivere (sovrascrive se esiste) with open("output.txt", "w", encoding="utf-8") as f: f.write("Prima riga\n") f.write("Seconda riga\n") # Scrivere più righe con writelines righe = ["Riga 1\n", "Riga 2\n", "Riga 3\n"] with open("output.txt", "w", encoding="utf-8") as f: f.writelines(righe) # Aggiungere in fondo (append) with open("log.txt", "a", encoding="utf-8") as f: f.write("Nuova riga aggiunta\n")
Gestione degli errori con try/except
Quando lavori con i file, molte cose possono andare storte — il file non esiste, non hai i permessi, il disco è pieno. La gestione delle eccezioni ti permette di gestire questi casi senza far crashare il programma.
try: with open("file_inesistente.txt", "r") as f: contenuto = f.read() except FileNotFoundError: print("Errore: file non trovato") except PermissionError: print("Errore: permessi insufficienti") except Exception as e: print(f"Errore generico: {e}") else: print("File letto con successo") # solo se nessun errore finally: print("Operazione completata") # sempre eseguito
Lavorare con CSV
import csv # Leggere un CSV with open("studenti.csv", "r", encoding="utf-8") as f: reader = csv.DictReader(f) # usa la prima riga come intestazione for riga in reader: print(f"{riga['nome']}: {riga['voto']}") # Scrivere un CSV studenti = [ {"nome": "Marco", "voto": 8}, {"nome": "Sara", "voto": 9}, ] with open("output.csv", "w", newline="", encoding="utf-8") as f: writer = csv.DictWriter(f, fieldnames=["nome", "voto"]) writer.writeheader() writer.writerows(studenti)
Lavorare con JSON
import json # Da Python a JSON (serializzazione) dati = {"nome": "Marco", "eta": 28, "linguaggi": ["Python", "Java"]} # Salva su file with open("dati.json", "w", encoding="utf-8") as f: json.dump(dati, f, indent=2, ensure_ascii=False) # Da JSON a Python (deserializzazione) with open("dati.json", "r", encoding="utf-8") as f: dati_caricati = json.load(f) print(dati_caricati["nome"]) # Marco # Conversione stringa ↔ JSON json_str = json.dumps(dati) # dict → stringa JSON dati2 = json.loads(json_str) # stringa JSON → dict
ensure_ascii=False a json.dump() — altrimenti i caratteri verranno codificati come sequenze unicode (\u00e0 invece di à).