Appendice Tecnica: importare e leggere un file di configurazione [.ini] in Python
#axts #devdiary #python #file #configurazione
NEWSLETTER? NO, GRAZIE!
Unisciti al mio canale Telegram! Onnipresente. Silenzioso. Non ingombrante.
> AxelTheSaint <
Sommario Veloce
Per migliore utilizzo della guida, ecco i link che riportano direttamente alle sezioni specifiche. Se vuoi arrivare dritto al codice puoi farlo immediatamente. Se invece desideri comprendere anche la teoria, sono presenti le specifiche sezioni.
- Requisiti di sistema testati
- Guida Tecnica: creare funzione per importare leggere file in Python
- Appendice Teorica: file di configurazione e ConfigParser()
Requisiti di sistema testati
- Python: qualsiasi versione [per sapere come installare Python ho preparato una guida dedicata]
- Windows: versione 10 e 11 [crea qui la tua immagine di sistema]
- Editor: Visual Studio Code / Notepad++
Guida Tecnica: come importare leggere file in Python
Creare una funzione che sia in grado di importare e e leggere un file di configurazione con estensione .ini in Python
N.B.: salva i file sotto indicati in una unica cartella
LISTATO – import_reading_file.py
puoi copiare e incollare il codice qui sotto in un file e nominalo: import_reading_file.py
# importo la libreria necessaria
from configparser import ConfigParser
# definisco la funzione con due parametri in ingresso
# 'filename' = contiene il nome del file da leggere
# 'section' = contiene i parametri che mi interessa leggere
# Con questa sintassi, in assenza di un richiamo della funzione
# con parametri diversi, verranno presi questi due valori di default
def import_read(filename='configurazione.ini', section='my_section'):
# creo un oggetto parser
parser = ConfigParser()
# l'oggetto legge il file, default = 'configurazione.ini'
parser.read(filename)
# creo un dizionario per contenere tutto quello che ci
# sarà dentro la 'section'
dictionary = {}
# vado a leggere la 'section', default = 'my_section'
if parser.has_section(section):
# se la sezione è presente, inserisco tutti i parametri
# in blocco dentro una variabile, attraverso l'oggetto
# parser
params = parser.items(section)
# eseguo un ciclo 'for' sulla variabile contente tutti
# i parametri della sezione
for param in params:
# i parametri saranno sempre in coppia
# chiave - valore, assegno il parametro 0 (chiave) della
# 'section' come chiave del dizionario, assegno il
# parametro 1 (valore) della 'section' alla chiave del
# dizionario che ho impostato precedentemente
dictionary[param[0]] = param[1]
else:
# se invece la sezione non è presente, mostro un
# messaggio di errore a schermo.
# Il codice riportato è da scrivere
# tutto su di una riga
raise Exception('Section {0} not found in the {1} file'.format(section, filename))
# restituisco il dizionario popolato con i
# valori del file di configurazione
return dictionary
LISTATO – configurazione.ini
puoi copiare e incollare il codice qui sotto in un file e nominalo: configurazione.ini
[my_section]
nome=Gianpippo
cognome=Filibustieri
mail=gianpippo.filibustieri@gmail.com
numero=75
Appendice Teorica: file di configurazione
I file di configurazione sono file di testo con estensione .ini
Per leggere questi file è sufficiente aprirli con un blocco note o un editor di testo qualsiasi. Solitamente si predilige l’uso di software come Visual Studio Code, Notepad++, Atom o simili. Questi editor sono realizzati appositamente per la programmazione e permettono la formattazione del codice scritto grazie al supporto di diversi plugin che permettono il riconoscimento del codice scritto (evidenziando il testo con colori differenti in base alle istruzioni scritte).
Il file di configurazione preso in esame contiene una sintassi specifica:
- [nome_della_sezione] : qui scrivo il nome della sezione che andrò a trattare. Non è importante come la chiami, l’importante è che sia una parola chiave che ti aiuti ad esplicare il contenuto successivo e che quindi sia significativa per le tue esigenze.
- chiave=valore : sotto al nome sezione scriverò una serie di parametri valorizzati, a sinistra imposto il nome della “chiave”, ovvero il nome del parametro che andrò a valorizzare, a destra invece imposto il valore associato alla chiave, ovvero che valore ha il parametro che ho appena specificato.
Perché sono utili i file di configurazione e quando si usano?
Ci sono diversi vantaggi nell’impiegare questo genere di file:
- i parametri che servono al funzionamento del nostro programma, ad esempio delle credenziali o dei riferimenti specifici importanti, non vengono scritto in chiaro nel codice.
- sono riutilizzabili ovunque ce ne sia bisogno senza doverli riscrivere.
- se cambiano i valori dei parametri al loro interno, sarà sufficienti modificarli una volta sola senza doverli riscrivere in ogni parte del codice dove vengono usati.
- aiutano a snellire il codice riservando una parte dedicata alla specifica dei parametri senza doverli elencare tutti nel listato.
- sono modulari quindi aiutano a poter rendere il codice adattabile a diverse esigenze. (Basterà infatti cambiare i valori dei parametri per far funzionare il programma in egual modo).
Appendice Teorica: importare leggere file in Python, la funzione ConfigParser()
All’inizio del listato c’è l’istruzione:
from configparser import ConfigParser
Grazie a questa riga importo la funzione ConfigParser da una libreria chiamata ‘configparser’.
(Sì, la fantasia non è il punto forte dei programmatori, siamo più pragmatici con i nomi).
Per tradurla in un modo comprensibile: sostanzialmente la funzione ConfigParser() crea un oggetto che ha la funzione di “parser”.
N.B.: In informatica il parsing è un processo che analizza un flusso di dati in ingesso e ne determina la correttezza strutturale in base ad una data grammatica formale
Praticamente:
L’oggetto creato dalla funzione ConfigParser(), attraverso una serie di opzioni, legge e interpreta il contenuto all’interno del file di configurazione, in base alla sezione di file che gli ho chiesto di cercare.
Il risultato è un “polpettone” di parametri il cui nome è specificato dalla “chiave”, ed il valore da ciò che c’è scritto dopo
[my_section] <- Nome della sezione
nome=Gianpippo
chiave=valore
Perciò ho utilizzato un ciclo for che passa in rassegna valore per valore contenuto all’interno dell’oggetto “parser“. A questo punto i valori vanno salvati quindi mi creo un dizionario composto da coppie chiavi-valore:
dictionary = {
"nome":"Gianpippo"
}
A questo punto tutti i parametri contenuti all’interno del mio file di configurazione sono stati importati e sono raggiungibili tramite:
dictionary['nome']
Ovviamente, come è possibile vedere nell’esempio, se avessi una password non dovrei scriverla tutte le volte ma basterebbe richiamare il campo specifico, senza mai bisogno di scriverla in chiaro:
dictionary['password']