ConfigParser - Lavora con i File di Configurazione

Scopo Leggere/scrivere file di configurazione simili ai file INI di Windows
Versione Python 1.5

Il modulo ConfigParser si usa per gestire dei file di configurazione per un'applicazione che siano modificabii dall'utente. I file di configurazione sono organizzati in sezioni, ed ogni sezione può contenere coppie di nomi-valori per la configurazione di dati. L'interpolazione del valore tramite l'uso di stringhe di formattazione Python è supportata, per costruire valori che dipendono l'uno dall'altro (questo è particolarmente comdo per stringhe di messaggio ed URL).

Formato del File di Configurazione

Il formato di file usato da ConfigParser è simile a quello usato dalle vecchie versioni di Microsoft Windows. Consiste in una o più sezioni nominate, ognuna delle quali può contenere opzioni individuali con nomi e valori.

Le sezioni del file di configurazione sono identificate cercando delle righe che iniziano con [ e finiscono con ]. Il valore racchiuso tra le parentesi quadre è il nome della sezione, e può contenere qualsiasi carattere ad eccezione delle parentesi quadre.

Le opzioni sono elencate una per riga all'interno di una sezione. La riga inizia con il nome dell'opzione, la quale è separata dal valore dai due punti (:) oppure dall'uguale (=). I caratteri whitespace attorno al separatore vengono ignorati metre il file viene elaborato.

Un semplice file di configurazione con la sezione "bug_tracker", con tre opzioni dovrebbe avere il seguente aspetto:

[bug_tracker]
url = http://localhost:8080/bugs/
username = dhellmann
password = SECRET

Leggere i File di Configurazione

L'uso più comune per un file di configurazione è quello di avere un utente od un amministratore di sistema che lo modifichi con un normale editor di file per impostare i comportamenti predefiniti dell'applicazione, quindi il file vien fatto leggere dall'applicazione, che lo elabora ed agisce in base al suo contenuto. Per leggere il file di configurazione si usa il metodo read() di SafeConfigParser.

from ConfigParser import SafeConfigParser

parser = SafeConfigParser()
parser.read('simple.ini')

print parser.get('bug_tracker', 'url')

Il programma legge il file simple.ini visto qui sopra e stampa il valore dell'opzione url dalla sezione bug_tracker.

$ python ConfigParser_read.py
http://localhost:8080/bugs/

Il metodo read() accetta anche un elenco di nomi di file. Ciascun nome viene scorso a turno, e se il file esiste viene aperto e letto.

from ConfigParser import SafeConfigParser
import glob

parser = SafeConfigParser()

candidates = ['non_esiste.ini', 'anche-questo-non-esiste.ini',
              'simple.ini', 'multisezione.ini',
              ]

found = parser.read(candidates)

missing = set(candidates) - set(found)

print 'File di configurazione trovati :', sorted(found)
print 'File di configurazione mancanti:', sorted(missing)

read() restituisce un elenco che contiene i nomi dei file caricati con successo, in modo che il programma possa scoprire quali file di configurazione sono mancanti e decidere se ignorarli.

$ python ConfigParser_read_many.py

File di configurazione trovati : ['simple.ini']
File di configurazione mancanti: ['anche-questo-non-esiste.ini', 'multisezione.ini', 'non_esiste.ini']

Dati di Configurazioni Unicode

I file di configurazione che contengono dati Unicode dovrebbero essere aperti con il modulo codecs per impostare il valore di codifica appropriato.

Modificare il valore di password originale in modo che contengo caratteri Unicode e salvare i risultati nella codifica UTF-8 genera:

[bug_tracker]
url = http://localhost:8080/bugs/
username = dhellmann
password = ßéç®é†

Il file handle di codecs può essere passato a readfp(), il quale usa il metodo readline() dei suoi parametri per ottenere le righe dal file ed analizzarle.

from ConfigParser import SafeConfigParser
import codecs

parser = SafeConfigParser()

# Apre il file con la codifica corretta
with codecs.open('unicode.ini', 'r', encoding='utf-8') as f:
    parser.readfp(f)

password = parser.get('bug_tracker', 'password')

print 'Password:', password.encode('utf-8')
print 'Type    :', type(password)
print 'repr()  :', repr(password)

Il valore restituito da get() è un oggetto unicode, quindi per stamparlo in sicurezza deve essere ricodificato come UTF-8.

$ python ConfigParser_unicode.py
Password: ßéç®é†
Type    : 
repr()  : u'\xdf\xe9\xe7\xae\xe9\u2020'

Accedere le Impostazioni di Configurazione

Vedere anche:

ConfigParser
La documentazione della libreria standard per questo modulo.