Development · Python

Corso Python — Lezione 8: File e Input/Output

Corso Python — Lezione 8: File e Input/Output — NBcorsi
Corso Python Lezione 8 di 10Livello base8 min lettura

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.

Obiettivi di questa lezione
Aprire, leggere e scrivere file di testo
Usare il context manager with open()
Gestire gli errori con try/except
Lavorare con file CSV
Leggere e scrivere 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àSignificatoNote
“r”Lettura (default)Errore se il file non esiste
“w”ScritturaCrea il file o lo sovrascrive
“a”Append (aggiunta)Aggiunge in fondo senza cancellare
“x”Crea nuovo fileErrore se il file esiste già
“r+”Lettura e scritturaIl 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
Usa sempre with open(). Il context manager garantisce che il file venga chiuso correttamente anche se si verifica un’eccezione nel mezzo della lettura. Specifica sempre 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: quando scrivi JSON con caratteri accentati italiani (à, è, ì, ò, ù), aggiungi sempre ensure_ascii=False a json.dump() — altrimenti i caratteri verranno codificati come sequenze unicode (\u00e0 invece di à).
Esercizio pratico
Scrivi un programma che legge un file di testo, conta le parole, le righe e i caratteri, poi salva le statistiche in un file JSON. Gestisci il caso in cui il file non esiste con un messaggio di errore appropriato.
pythonfileiojsoncsveccezionicorso pythondevelopment
Lezione 8/10 · ~750 parole · 8 min lettura · area: development · livello: base
Nicodemo Bonofiglio

Ingegnere Informatico con oltre 20 anni di esperienza in ambito ERP, banking e PA. Analista funzionale, appassionato di AI e sviluppo web. Fondatore di NBcorsi — guide IT pratiche in italiano.

Vedi tutti gli articoli →
0 0 voti
Valutazione dell'articolo
Iscriviti
Notificami
guest
0 Commenti
Vecchi
Più recenti Le più votate
Feedback in linea
Visualizza tutti i commenti