Imparare Python da zero #05: leggere e scrivere file di testo

In Python i file di testo vengono aperti tramite la funzione built-in open() e vengono letti riga per riga tramite il metodo readline(). Una volta che si sono terminate le operazioni sul file occorre chiuderlo tramite il metodo close().
Vediamo un esempio, in cui creiamo un file di testo che chiamiamo “textfile.txt” contenente le 3 righe seguenti:

Prima riga
Seconda riga
Terza Riga

Creiamo un programmino in Python che apre il file, legge la prima riga e la stampa a video:

num = open("textfile.txt")
s = num.readline()
print(s)
num.close()

Python open file readline

Il metodo readline() ci permette quindi di leggere una riga. L’utilizzo più frequente però, in genere, è quello in cui viene letto l’intero file. Python ci permette di farlo in modo molto semplice tramite un costrutto for. Per vedere come funziona facciamo un altro esempio supponendo di avere un file di testo chiamato “numbers.txt” contenente la seguente lista di numeri:

10
15
3
18
20
25
35

Creiamo un programmino che legge tutti i numeri presenti nel file e moltiplica ciascuno di essi per un valore inserito in input dall’utente.
Per semplicità supponiamo che tutti i valori richiesti siano interi ed omettiamo la gestione delle eccezioni che invece dovrebbe esserci, come visto nel relativo post precedente.

m = int(input("Inserisci il valore che vuoi moltiplicare: "))
num = open("numbers.txt")
for single_line in num:
    print(int(single_line) * m)
num.close()

Python read file with for

Vediamo cosa succede nel caso in cui il file che stiamo cercando di aprire con il metodo open() non esista.
Modifichiamo il programma dell’esempio precedente in modo che cerchi di aprire il file “numb.txt” invece di quello corretto “numbers.txt”.
Python open file FileNotFoundError

Come possiamo vedere otteniamo un FileNotFoundError che ci segnala che il file che stiamo cercando di aprire non esiste:

FileNotFoundError: [Errno 2] No such file or directory: 'numb.txt'

Per evitare che si verifichi l’errore, dobbiamo gestire l’operazione di apertura del file con un blocco try-except, indicando che vogliamo gestire appunto un’eccezione di tipo FileNotFoundError:

m = int(input("Inserisci il valore che vuoi moltiplicare: "))
try:
    num = open("numb.txt")   #il file numb.txt NON ESISTE!
    for single_line in num:
        print(int(single_line) * m)
    num.close()
except FileNotFoundError:
    print("File NON trovato!")

Python open file try-except

Una volta che abbiamo calcolato i nuovi valori moltiplicati per il numero preso in input però, anzichè stamparli semplicemente a video vogliamo salvarli su un nuovo file di output. Dobbiamo quindi aprire un nuovo file ma questa volta in scrittura. Per farlo utilizziamo nuovamente il metodo open(), specificando però questa volta la modalità di apertura come secondo parametro del metodo. L’opzione per indicare di aprire il file in modalità scrittura è, ovviamente, “w“. Inoltre, dobbiamo indicare alla funzione print che questa volta non vogliamo più stampare i valori a video ma li vogliamo scrivere sul file che abbiamo aperto in scrittura. Per fare questo dobbiamo fornire il riferimento al nostro file di output come valore dell’argomento “file” della funzione print.

m = int(input("Inserisci il valore che vuoi moltiplicare: "))
output_num = open("output_numbers.txt", "w")
try:
    num = open("numbers.txt")   #il file numb.txt NON ESISTE!
    for single_line in num:
        print(int(single_line) * m, file=output_num)
    num.close()
except FileNotFoundError:
    print("File NON trovato!")
output_num.close()

In questo caso, l’apertura del file in modalità scrittura la escludiamo dal blocco try-except, in quanto nel caso in cui il file non esista, esso viene automaticamente creato e non viene generato alcun errore.
SPython open file w mode

In questo caso non viene mostrato a video nessun output, in quanto i valori vengono scritti su file. Andiamo a controllare nella cartella in cui si trova il nostro modulo python e troviamo il file “output_numbers.txt” che contiene i valori:

50
75
15
90
100
125
175

Se rieseguiamo nuovamente il programma ora che il file esiste già, il suo contenuto viene completamente sovrascritto. Se vogliamo aprire un file in scrittura ma invece che cancellare il suo contenuto vogliamo aggiungere al fondo le nuovo righe, dobbiamo aprirlo in modalità append che si indica con “a“.
Modifichiamo il programma precedente, modificando la riga

output_num = open("output_numbers.txt", "w")

in

output_num = open("output_numbers.txt", "a")

e proviamo ad eseguirlo di nuovo, specificando questa volta il valore 10 come parametro di input.
Python open file a mode

Se apriamo nuovamente il file “output_numbers.txt” vediamo che il suo contenuto ora è:

50
75
15
90
100
125
175
100
150
30
180
200
250
350

3 thoughts on “Imparare Python da zero #05: leggere e scrivere file di testo

  1. Pingback: Imparare Python da zero #06: ancora su files ed eccezioni e statement “with” | Dede Blog

  2. Complimenti spiegazioni chiari con i tuoi articoli o capito 2 o 3 cosette che mi erano nebulose. Aspetto con ansia se ci sara la programmazione ad oggetti in python 3 che sto studiando.

    • Sono contento che tu li abbia trovati chiari e utili. Certamente nei prossimi articoli della serie affronteremo anche la creazione delle classi e gli aspetti della programmazione ad oggetti.
      A presto,
      Davis

Leave a Reply to franco Cancel reply

Your email address will not be published. Required fields are marked *