Confronto: gestione dei file in Python

Esempio Funzione principale Approccio Pro / Contro
scriviFile.py Scrittura su file open("file", "a") + write() Pro: semplice e chiaro, consente scrittura multipla in coda; Contro: write() non aggiunge automaticamente newline, va fatto manualmente
leggiFileFor.py Lettura riga per riga con for Ciclo for line in file Pro: Pythonic, pulito, il ciclo termina automaticamente a fine file; Contro: meno flessibile se si vuole manipolare il puntatore del file
leggiFileWhile.py Lettura riga per riga con while e readline() Ciclo while line != "" Pro: permette controlli più espliciti e logica complessa durante la lettura; Contro: più verboso, il ciclo deve essere gestito manualmente
contaCarFile.py Conteggio caratteri nel file Legge tutto con read() + ciclo for sui caratteri Pro: didattico, mostra iterazione su stringhe; Contro: meno efficiente per file grandi
contaCarFile2.py Conteggio caratteri nel file Legge tutto con read() + str.count() Pro: Pythonic e compatto, molto più leggibile e veloce; Contro: bisogna caricare tutto il file in memoria

Sintesi didattica

  1. Scrittura su file

    • Usa open("file", "w") per sovrascrivere o open("file", "a") per appendere.
    • Non dimenticare \n se vuoi andare a capo.
  2. Lettura riga per riga

    • Ciclo for su file: semplice e Pythonic.
    • Ciclo while con readline(): più verboso, utile se vuoi manipolare la riga letta prima di leggere la successiva.
  3. Lettura e analisi contenuto

    • Leggere tutto in memoria con read() è comodo per file piccoli.
    • Per operazioni semplici come il conteggio dei caratteri, str.count() è più rapido e leggibile.
    • Iterare su ogni carattere con for permette di aggiungere logica complessa su ciascun carattere.

Gestione file Pythonica

# Python 3: scrittura, lettura e analisi file in modo compatto e leggibile

# Nome del file
filename = "fileProva.txt"

# --- 1) Scrittura / Append ---
# Se il file non esiste viene creato, altrimenti i contenuti vengono aggiunti
with open(filename, "a") as f:
    f.write("stringa di prova\n")
    f.write("seconda \tstringa\n")
    f.write("terza \t\tstringa\n")

# --- 2) Lettura riga per riga (Pythonic) ---
print("Lettura riga per riga:")
with open(filename, "r") as f:
    for line in f:
        print(line.strip())  # strip() rimuove \n e spazi iniziali/finali

print("\n--- Lettura completa del file ---")
# --- 3) Lettura completa in memoria ---
with open(filename, "r") as f:
    content = f.read()
print(content)

# --- 4) Conteggio caratteri usando for (didattico) ---
char_to_count = input("Inserisci il carattere da cercare: ")
count_for = sum(1 for c in content if c == char_to_count)
print(f"Conteggio usando for: il carattere '{char_to_count}' compare {count_for} volte")

# --- 5) Conteggio caratteri usando str.count() (Pythonic) ---
count_count_method = content.count(char_to_count)
print(f"Conteggio usando count(): il carattere '{char_to_count}' compare {count_count_method} volte")

Vantaggi di questa versione

  1. with open(...) as f: gestisce automaticamente la chiusura del file.
  2. for line in f: legge riga per riga in modo Pythonico, senza preoccuparsi della fine del file.
  3. str.count() è il modo più semplice e veloce per contare occorrenze.
  4. Mantiene anche la versione “didattica” con for c in content per mostrare la logica dei cicli.
  5. Codice compatto, leggibile e facile da estendere.