Accueil > Python > Configuration(s) grâce à ConfigParser

Configuration(s) grâce à ConfigParser

configparser est un module de la bibliothèque standard Python permettant de lire ou d’écrire une configuration. C’est utile pour séparer code source et paramètres. D’autres solutions sont possibles comme du json (disponible dans la bibliothèque standard) ou, en utilisant des bibliothèques tierces disponibles sur pypi.org, du yaml voire toml (pour ceux qui veulent le dernier truc à la mode).

La classe configparser.ConfigParser() permet de lire différentes sources (une chaîne de caractères, un fichier ou un dictionnaire) mais aussi d’écrire des configurations dans un fichier.

conf = """
[batman]
talent = riche
"""
import configparser
config = configparser.ConfigParser()
config.read_string(conf)
# config["batman"]["talent"] vaut "riche"

with open('superheros.ini', 'w') as f:
    config.write(f)
# le fichier superheros.ini contient les données de Batman

Un aperçu plus large des possibilités est présenté dans l’introduction du module.

Possibilité moins connue, ConfigParser peut lire plusieurs configurations successives. Les données lues écrasent les données précédentes ; les données non modifiées restent.

Supposons une initialisation avec un dictionnaire:

PAR_DEFAUT = {
    "superman": {"talent": "vole avec son slip sur son pantalon"},
    "kleptomane": {"talent": "vole des petites cuillères"},
}

ConfigParser peut charger cette configuration avec la méthode read_dict().

config = configparser.ConfigParser()
config.read_dict(PAR_DEFAUT)
# config['superman']["talent"] vaut "vole avec son slip sur son pantalon"
  • le comportement d’une instance de ConfigParser() ressemble à celui d’un dictionnaire
  • les données sont obligatoirement dans une section (batman, superman, kleptomane)
  • les valeurs sont toujours des chaînes de caractères

Ces valeurs par défaut pourraient être écrasées par un fichier de configuration. Le format de fichier attendu est de type .ini.

Avec un fichier de configuration /etc/heros.ini contenant:

[superman]
talent=vole sans être décoiffé

config.read("/etc/heros.ini")
# config["superman"]["talent"] vaut maintenant "vole sans être décoiffé"
# config["kleptomane"]["talent"] est inchangé

Évidemment, les noms doivent être impérativement identiques aux valeurs par défaut pour qu’elles écrasent la valeur précédente et non qu’elles co-existent et soient ignorées par la suite.

Il est possible de redéfinir à nouveau la configuration avec d’autres fichiers (~/config/superheros.conf par exemple) en faisant de nouveaux appels config.read(). Idem avec config.read_dict() ou config.read_string().

Le comportement d’écrasements successifs des données n’est pas explicite dans la documentation Python mais une amélioration de la documentation est en attente.

Catégories :Python
  1. Aucun commentaire pour l’instant.
  1. No trackbacks yet.

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

%d blogueurs aiment cette page :