Gestione dei file

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.

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

Lascia un commento