📁

📁 Gestione dei File in Python

Impara a leggere, scrivere e manipolare file per conservare i tuoi dati in modo persistente

💾 Perché gestire i file?

La gestione dei file in Python è un aspetto fondamentale della programmazione, permettendo di leggere, scrivere e modificare dati in modo persistente. I file vengono utilizzati per conservare informazioni tra le esecuzioni di un programma, evitando la perdita di dati.

⚙️ Configurazione

Salvataggio di dati di configurazione e preferenze utente

📊 Logging

Registrazione di eventi e attività del programma

📋 Dati Strutturati

Manipolazione di file CSV, JSON e XML

🔢 File Binari

Lettura e scrittura di immagini, audio e altri file binari


🔓
Apertura e Chiusura dei File

L’accesso ai file in Python avviene tramite la funzione open(), che richiede il percorso del file e una modalità di apertura.

⚠️ Metodo Tradizionale (Non Raccomandato):

Richiede la chiusura manuale del file con close()

Python – Metodo Base
file = open("esempio.txt", "r")  # Apertura in lettura
contenuto = file.read()
file.close()  # ⚠️ Chiusura manuale necessaria!

✅ Metodo Raccomandato: Context Manager

Utilizza with per gestire automaticamente l’apertura e la chiusura del file

Python – Best Practice
with open("esempio.txt", "r") as file:
    contenuto = file.read()
    # Il file viene chiuso automaticamente all'uscita dal blocco! ✅

💡 Perché usare with?

  • Chiusura automatica del file anche in caso di errori
  • Codice più pulito e leggibile
  • Gestione corretta delle risorse di sistema

🎛️
Modalità di Apertura

Python offre diverse modalità per aprire i file, ognuna con uno scopo specifico:

Modalità Descrizione Uso Comune
r Lettura (default). Il file deve esistere. Leggere configurazioni, log
w Scrittura. Se il file esiste, viene sovrascritto. Creare nuovi file
a Aggiunta. I nuovi dati vengono aggiunti alla fine. Scrivere log incrementali
x Creazione. Se il file esiste, genera un errore. Creare file unici
b Modalità binaria (combinabile: rb, wb) Immagini, audio, video
r+ Lettura e scrittura Modificare file esistenti

📌 Nota Importante:

La modalità w cancella completamente il contenuto esistente. Per aggiungere dati, usa a!

✍️
Lettura e Scrittura

Python fornisce diversi metodi per interagire con i file, ognuno ottimizzato per casi d’uso specifici:

📖 Metodi di Lettura

  • read() – legge tutto il contenuto del file
  • readline() – legge una singola riga alla volta
  • readlines() – restituisce una lista di tutte le righe

✍️ Metodi di Scrittura

  • write() – scrive una stringa nel file
  • writelines() – scrive una lista di stringhe

📝 Esempio: Scrittura in un File

Python – Scrittura
with open("esempio.txt", "w") as file:
    file.write("Questo è un nuovo testo\n")
    file.write("Seconda riga di testo\n")
    
# File salvato e chiuso automaticamente! ✅

📖 Esempio: Lettura Riga per Riga

Python – Lettura
with open("esempio.txt", "r") as file:
    for riga in file:
        print(riga.strip())  # strip() rimuove spazi e \n

# Output:
# Questo è un nuovo testo
# Seconda riga di testo

💡 Best Practice:

Per file di grandi dimensioni, è preferibile leggere riga per riga piuttosto che caricare tutto in memoria con read(). Questo approccio è più efficiente e previene problemi di memoria.

🔄 Esempio: Lettura Completa del File

Python – Lettura Completa
# Metodo 1: Tutto in una stringa
with open("esempio.txt", "r") as file:
    contenuto = file.read()
    print(contenuto)

# Metodo 2: Lista di righe
with open("esempio.txt", "r") as file:
    righe = file.readlines()
    for riga in righe:
        print(riga.strip())

⚠️
Gestione degli Errori

Durante la manipolazione dei file possono verificarsi vari errori: file inesistenti, permessi insufficienti, disco pieno, ecc. È fondamentale gestirli correttamente con try-except.

🚨 Errori Comuni:

  • FileNotFoundError: Il file specificato non esiste
  • PermissionError: Permessi insufficienti per accedere al file
  • IOError: Errore generico di input/output
  • IsADirectoryError: Si sta tentando di aprire una cartella come file
Python – Gestione Errori
try:
    with open("esempio.txt", "r") as file:
        contenuto = file.read()
        print(contenuto)
except FileNotFoundError:
    print("❌ Errore: Il file non esiste.")
except PermissionError:
    print("❌ Errore: Permessi insufficienti per leggere il file.")
except IOError as e:
    print(f"❌ Errore di lettura/scrittura: {e}")
else:
    print("✅ File letto con successo!")
finally:
    print("🔚 Operazione completata.")

💡 Struttura Completa:

  • try: Codice che potrebbe generare errori
  • except: Gestione degli errori specifici
  • else: Eseguito solo se NON ci sono errori
  • finally: Eseguito sempre, con o senza errori

🛡️ Esempio: Scrittura Sicura

Python – Scrittura con Controllo Errori
def scrivi_file_sicuro(nome_file, contenuto):
    try:
        with open(nome_file, "w") as file:
            file.write(contenuto)
        return True, "✅ File scritto con successo"
    except PermissionError:
        return False, "❌ Permessi insufficienti"
    except IOError as e:
        return False, f"❌ Errore: {e}"

# Utilizzo
successo, messaggio = scrivi_file_sicuro("dati.txt", "Hello World!")
print(messaggio)


🚀
Gestione Avanzata dei File in Python

Dopo aver visto le operazioni di base, esploriamo tecniche avanzate per la manipolazione efficiente di file di testo e binari. Questi strumenti sono essenziali quando si lavora con grandi quantità di dati o formati specifici come CSV e JSON.

🖼️
Lettura e Scrittura di File Binari

Oltre ai file di testo, Python consente la gestione di file binari, essenziali per immagini, audio, video e altri dati non testuali.

💡 Quando usare i file binari?

  • Immagini (JPG, PNG, GIF)
  • Audio e video (MP3, MP4, AVI)
  • File compressi (ZIP, RAR)
  • Eseguibili e librerie
Python – File Binari
# Lettura di un file binario (es. immagine)
with open("immagine.jpg", "rb") as file:
    dati = file.read()

# Scrittura su un nuovo file binario (copia)
with open("copia.jpg", "wb") as file:
    file.write(dati)

print("✅ File copiato con successo!")

📌 Modalità Binarie:

rb = Read Binary (lettura binaria)
wb = Write Binary (scrittura binaria)
Queste modalità assicurano la corretta lettura e scrittura dei dati binari senza modifiche.

📊
Gestione dei File CSV

I file CSV (Comma-Separated Values) sono comunemente utilizzati per la gestione di dati tabulari. Python offre il modulo csv per lavorare facilmente con questi file.

📖 Lettura di un File CSV

Python – Lettura CSV
import csv

with open("dati.csv", "r", newline="", encoding="utf-8") as file:
    lettore = csv.reader(file)
    for riga in lettore:
        print(riga)

# Output esempio:
# ['Nome', 'Età', 'Città']
# ['Alice', '30', 'Roma']
# ['Bob', '25', 'Milano']

✍️ Scrittura su un File CSV

Python – Scrittura CSV
import csv

with open("output.csv", "w", newline="", encoding="utf-8") as file:
    scrittore = csv.writer(file)
    scrittore.writerow(["Nome", "Età", "Città"])
    scrittore.writerow(["Alice", 30, "Roma"])
    scrittore.writerow(["Bob", 25, "Milano"])

print("✅ File CSV creato con successo!")

📌 Parametri Importanti:

newline="" – Evita problemi con le righe vuote nei file CSV
encoding="utf-8" – Supporta caratteri speciali e accentati

💡 CSV con Dizionari:

Per CSV più complessi, usa csv.DictReader e csv.DictWriter per lavorare con dizionari invece di liste!

🗂️
Lavorare con File JSON

Il formato JSON (JavaScript Object Notation) è molto diffuso per la memorizzazione e lo scambio di dati tra applicazioni. Python offre il modulo json per gestire facilmente questi file.

💡 Perché JSON?

  • Formato leggibile e strutturato
  • Standard per API e servizi web
  • Supporta tipi di dati complessi (liste, dizionari, annidamenti)

📖 Lettura di un File JSON

Python – Lettura JSON
import json

with open("dati.json", "r", encoding="utf-8") as file:
    dati = json.load(file)
    print(dati)

# Accesso ai dati
print(f"Nome: {dati['nome']}")
print(f"Età: {dati['età']}")

✍️ Scrittura su un File JSON

Python – Scrittura JSON
import json

dati = {
    "nome": "Alice",
    "età": 30,
    "città": "Roma",
    "hobby": ["lettura", "coding", "viaggi"]
}

with open("output.json", "w", encoding="utf-8") as file:
    json.dump(dati, file, indent=4, ensure_ascii=False)

print("✅ File JSON creato con successo!")

📌 Parametri Utili:

indent=4 – Rende il JSON più leggibile con indentazione
ensure_ascii=False – Preserva i caratteri accentati


Manipolazione di File di Grandi Dimensioni

Quando si lavora con file molto grandi, è fondamentale leggere i dati in modo incrementale per ottimizzare l’uso della memoria ed evitare crash del programma.

⚠️ Problema:

Caricare un file da 1GB in memoria con read() può bloccare il sistema!

✅ Soluzione: Lettura Incrementale

Python – Lettura Efficiente
def processa(linea):
    # La tua logica di elaborazione
    print(linea.strip())

with open("grande_file.txt", "r", encoding="utf-8") as file:
    for linea in file:
        processa(linea)  # Elabora una riga alla volta

# Vantaggi:
# ✅ Usa poca memoria
# ✅ Funziona con file di qualsiasi dimensione
# ✅ Veloce ed efficiente

🔄 Lettura a Blocchi

Python – Lettura a Chunk
# Leggi il file a blocchi di 1024 byte
with open("grande_file.bin", "rb") as file:
    while True:
        chunk = file.read(1024)
        if not chunk:
            break
        # Elabora il blocco
        process_chunk(chunk)

Esercitazioni Guidate

🔹 Esercizio 1: Scrivi un File

Crea un file dati.txt e scrivi il tuo nome.

✅ Codice da completare:

Esercizio
with open("dati.txt", "w") as file:
    file.write(____)

✅ Soluzione:

Soluzione
with open("dati.txt", "w") as file:
    file.write("Mario Rossi")

# Oppure con input dell'utente:
nome = input("Inserisci il tuo nome: ")
with open("dati.txt", "w") as file:
    file.write(nome)
print("✅ File creato con successo!")

🔹 Esercizio 2: Leggi il File

Leggi e stampa il contenuto di dati.txt.

✅ Codice da completare:

Esercizio
with open("dati.txt", "r") as file:
    print(____)

✅ Soluzione:

Soluzione
with open("dati.txt", "r") as file:
    print(file.read())

# Oppure con gestione errori:
try:
    with open("dati.txt", "r") as file:
        contenuto = file.read()
        print(f"Contenuto del file: {contenuto}")
except FileNotFoundError:
    print("❌ File non trovato!")

🔹 Sfida Extra:

Aggiungi nuove righe al file senza sovrascrivere i dati esistenti. Suggerimento: usa la modalità "a" (append)!

🎓 Conclusione

Questa panoramica copre le basi della gestione dei file in Python. Per tecniche avanzate come la gestione di file binari, CSV e JSON, continua il tuo percorso!

📊 File CSV

Impara a manipolare dati tabulari e fogli di calcolo

🗂️ File JSON

Gestisci dati strutturati in formato JSON

🖼️ File Binari

Lavora con immagini, audio e video

📂 Gestione Path

Manipola percorsi e cartelle con pathlib

Torna in alto