Jul 03, 2024

Wiki

Python

Aide

edit SideBar

Search

Configparser


Lis et écrits des fichiers de configuration, similaires aux Windows INI, du genre de ceux éditables par les utilisateurs.

On peut ainsi utiliser ce module pour sauvegarder une petite quantité de données (au lieu de le faire dans une base de données), avec l'avantage que le fichier de configuration reste lisible.

Sources :

  • PyMOTW,
  • aide embarquée dans le module.

Format des fichiers de configuration

Ces fichiers de configurations sont scindés en section, chaque section pouvant contenir des couples nom-valeur de données de configuration. Les crochets [] encadrent les noms de section, le = sépare le nom de sa valeur :

  [portal]
  url = http://%(host)s:%(port)s/Portal
  username = dhellmann
  host = localhost
  password = SECRET
  port = 8080

Récupération et édition

Récupérer une valeur

Considérons le fichier de configuration ci-dessus, intitulé .approachrc, et situé dans le home. Pour récupérer l'url :

  >>> from ConfigParser import ConfigParser
  >>> config = ConfigParser()
  >>> config.read(['config.txt'])
  >>> url = config.get('portal', 'url')

Les valeurs host et port de l'url sont remplacées par localhost et 8080 par la méthode get().

Notons que, au lieu d'utiliser la methode get(), qui lit une chaîne de caractères, on peut utiliser getboolean(), getfloat() et getint(), pour lire des valeurs dans ces types.

Fixer une valeur

Cas des chaînes de caractères

Pour fixer la valeur d'une chaîne de caractères, on peut procéder ainsi :

  >>> from ConfigParser import ConfigParser
  >>> config = ConfigParser()
  >>> config.read(['config.txt'])

  >>> config.get('GENERAL','repertoireMedia')
  'Media2'
  >>> config.set('GENERAL','repertoireMedia','Media')
  >>> config.get('GENERAL','repertoireMedia')
  'Media'

Le fichier de configuration étant chargé en mémoire, cette modification n'affecte pas le fichier de configuration (ici, config.txt) : voir la sous-section suivante, pour le faire.

Fixer la valeur d'un entier, d'un booléen ou d'un flotant

S'il existe des méthodes get, getboolean, getint et getfloat, il n'existe qu'une méthode set.

Les seules valeurs que l'on peut rentrer, avec la méthode set, sont des chaînes de caractères.

Pour entrer la valeur entière 11 à l'option angle de la section ROTATION, on devra donc procéder ainsi :

  >>> config.set('ROTATION','nombre','11')

De toutes façons, le fichier de configuration config.txt n'est constitué que de caractères, qui prennent leurs types définitifs au moment de la lecture, par le choix de la méthode associée :

  >>> config.getint('ROTATION','nombre')
  11
  >>> config.get('ROTATION','nombre')
  '11'
  >>> config.getfloat('ROTATION','nombre')
  11.0

Tout n'est cependant pas réalisable : si l'on a saisi (set) la valeur 11.0 pour l'angle de la rotation, on pourra la lire :

  • comme une chaîne de caractères (get), comme un flottant (getfloat),
  • mais ni comme un entier (getint), ni comme un booléen (getboolean) :
  >>> config.set('ROTATION','nombre','11.0')
>>> config.getint('ROTATION','nombre')
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/lib/python2.5/ConfigParser.py", line 321, in getint
      return self._get(section, int, option)
    File "/usr/lib/python2.5/ConfigParser.py", line 318, in _get
      return conv(self.get(section, option))
  ValueError: invalid literal for int() with base 10: '11.0'

Sauvegarde de la configuration

Pour sauvegarder ladite modification, il faut ouvrir le fichier config.txt en écriture, puis utiliser la méthode write de config, comme ci-dessous :

  >>> fb=open('config.txt','w')
  >>> config.write(fb)

Gestion des sections

Lister les sections

Cela se fait avec la méthode sections :

  >>> from ConfigParser import ConfigParser
  >>> config = ConfigParser()
  >>> config.read(['config.txt'])

  >>>config.sections()
  ['ATTAQUE', 'SUITE_CHIFFREMENT', 'MARQUE', 'GENERAL', 'ONDELETTE', 
   'SUITE_BITSFORTSHOTE', 'HOTE_MARQUE', 'MARQUE_DECHIFFREE', 
   'MARQUE_EXTRAITE', 'SUITE_MARQUAGE', 'HOTE_MARQUE_ATTAQUE', 
   'CHIFFREMENT', 'ROTATION', 'COMPARAISON', 'SUITE_TELQUEL', 
   'SUITE_LOGISTIQUE', 'MARQUE_CHIFFREE', 'DECOUPAGE', 'HOTE',
   'MARQUAGE', 'SUITE_ALEASBIN', 'REDIMENSION']

Ajouter, retirer une section

On peut ajouter, ou retirer une section, avec les méthodes add_section et remove_section :

  >>> config.add_section('TOTO')
  >>> print config.sections()
  ['ATTAQUE', 'SUITE_CHIFFREMENT', 'MARQUE', 'GENERAL',
   'ONDELETTE', 'SUITE_BITSFORTSHOTE', 'TOTO', 'HOTE_MARQUE', 
   'MARQUE_DECHIFFREE', 'MARQUE_EXTRAITE', 'SUITE_MARQUAGE', 
   'HOTE_MARQUE_ATTAQUE', 'CHIFFREMENT', 'ROTATION', 'COMPARAISON', 
   'SUITE_TELQUEL', 'SUITE_LOGISTIQUE', 'MARQUE_CHIFFREE',
   'DECOUPAGE', 'HOTE', 'MARQUAGE', 'SUITE_ALEASBIN', 'REDIMENSION']

  >>> config.remove_section('TOTO')
  True
  >>> print config.sections()
  ['ATTAQUE', 'SUITE_CHIFFREMENT', 'MARQUE', 'GENERAL', 'ONDELETTE', 
   'SUITE_BITSFORTSHOTE', 'HOTE_MARQUE', 'MARQUE_DECHIFFREE', 
   'MARQUE_EXTRAITE', 'SUITE_MARQUAGE', 'HOTE_MARQUE_ATTAQUE', 
   'CHIFFREMENT', 'ROTATION', 'COMPARAISON', 'SUITE_TELQUEL', 
   'SUITE_LOGISTIQUE', 'MARQUE_CHIFFREE', 'DECOUPAGE', 'HOTE', 
   'MARQUAGE', 'SUITE_ALEASBIN', 'REDIMENSION']

(Penser à sauvegarder.)

Tester si une section existe

On peut tester si une section existe, avec la méthode has_section :

  >>> config.has_section('GENERAL')
  True

Gestion des options

Lister les options d'une section

Pour lister les options de la section GENERAL :

  >>> config.options('GENERAL')

On peut aussi lister les items d'une section, c'est-à-dire les options avec leurs valeurs :

  >>> config.items('GENERAL')
  [('chiffrement', 'False'), ('authentification', 'False'), 
   ('repertoiremedia', 'Media'), ('attaque', 'True'),
   ('marquage', 'True'), ('demarquage', 'True'), ('comparaison', 'True')]

Ajouter, retirer une option

La méthode set ne sert pas seulement à fixer une valeur à une option existante. Elle permet aussi de créer une nouvelle option, comme l'illustre l'exemple suivant :

  >>> config.options('ROTATION')
  ['angle', 'nombre']
  >>> config.set('ROTATION','toto','12')
  >>> config.items('ROTATION')
  [('angle', '2.'), ('toto', '12'), ('nombre', '11.0')]

Pour supprimer cette option, on peut utiliser la méthode remove_option :

  >>> config.remove_option('ROTATION','toto')
  True
  >>> config.items('ROTATION')
  [('angle', '2.'), ('nombre', '11.0')]

Tester si une option existe

On peut tester si une option existe, avec la méthode has_option :

  >>> config.has_option('GENERAL','angle')
  False

Page Actions

Recent Changes

Group & Page

Back Links