La gestione dei file è molto semplice in Python. Agli alunni di scuola superiore può tornare particolarmente utile per le gare di informatica come le Olimpiadi nazionali o altre competizioni analoghe. Vediamo qualche esempio.
Indice dei contenuti
Apertura del file
Aprire un file esistente o crearne uno nuovo è molto intuitivo. La chiamata open è già inclusa nello spazio standard, senza librerie da includere. Il parametro ‘w’ serve ad aprire in scrittura il file. La w sovrascrive il contenuto del file. Se volessimo aggiungere all’esistente la lettera da specificare è invece “a”
#apertura di un file in scrittura write
miofile = open("prova.txt", "w")
In sola lettura è banalmente:
#apro lo stesso file ma in lettura read
altroFile = open("prova.txt", "r")
Da tenere bene a mente che il file “prova.txt” per come è scritto nel nostro esempio richiede che sia presente nella stessa cartella dove andiamo ad eseguire il nostro script altrimenti dovremo dichiarare un percorso/path più completo (es. “C://cartellaprova|prova.txt” o “/home/utente/cartellaprova/prova.txt”)
Lettura del file
Proviamo a creare un file di testo con alcuni numeri uno sotto l’altro e andiamo a leggerli con il seguente script:
#per stampare il file posso usare la tecnica
#dei vettori ma non è molto leggibile
for riga in altroFile:
print (riga)
Esempio più realistico è inserire i valori in variabili o in un vettore. Attenzione ad essere sicuri di effettuare il cast dei dati perché la lettura restituisce un carattere/stringa.
vettore = []
mioFile = open("prova.txt", "r")
for riga in mioFile:
vettore.append(int(riga))
#posso usare gli elementi nel mio vettore come voglio
for elem in vettore:
print(elem)
Lettura di record
Il metodo migliore per leggere è usare il readline, che legge una intera riga, da stampare direttamente o prelevare i singoli valori per gestirli in altri modi mediante il metodo standard split. Metodo molto comodo soprattutto con i file csv di excel.
#questa chiamata legge una riga e si sposta
#sulla successiva pronto ad un'altra readline
riga = altroFile.readline()
print (riga)
#della stessa variabile, tolgo i ; che sono i
#separatori con la funzione split
#split restituisce un vettore con le parti
#del record separate
[nome,cognome,eta,sesso] = riga.split(';')
print(nome)
print(cognome)
print (eta)
print (sesso)
#oppure
un po' più spartano...
record = riga.split(';')
print(record[0])
print(record[1])
print (record[2])
print (record[3])
#oppure con un ciclo
for i in range(0, len(record)):
print(record(i))
altroFile.close()
Scrittura su file
La scrittura ha direttive altrettanto semplice. Andiamo direttamente ai record. In questo caso scriviamo direttamente un record, ovvero una serie di tuple/righe di dati omogenei, qui nel classico esempio NOME;COGNOME;ETA’;SESSO, tutti campi divisi dal separatore standard “;”, seguiti da una andata a capo. Al termine delle operazioni, è sempre bene chiudere il file.
#scrivo una riga e ci metto l'andata a capo
miofile.write("Alfredo;Centinaro;36;M" +'\n')
miofile.write("Fabiola;Taraschi;35;F" +'\n')
#chiudo il file
miofile.close()
Se volessimo ricominciare una nuova lettura, dobbiamo spostare il cursore del file all’inizio. Per farlo, il metodo seek ci viene incontro. Bata inserire come parametro il numero di riga che desideriamo risposti il cursore di lettura, ad esempio, all’inizio con zero.
mioFile.seek(0) #riporta all'inizio
Ultima modifica 27 Settembre 2023