1.3.3.4.6. Les fichiers de config .cfg ou .ini

On utilise le module ConfigParser. Voir aussi le tutoriel Configuration management.

Fichier de configuration initial :

# -*- coding: utf8 -*-
[DEFAULT]
# Valeurs accessible de toutes les sections
lat_min = 40.
lat_max = 50.
# Commentaire
# Autre forme de commentaire :
; lat_max = 51.
zone = Iroise

[sst]
# Nouvelle section
# - nom (utilisation de ':')
name: Sea surface temperature on %(zone)s
# - unites
units = C
 
[wind]
# - nom
name = Wind on %(zone)s
# Autre lat max
lat_max = 55.
# - unites
units = m/s
# -*- coding: utf8 -*-
# On charge le fichier
from ConfigParser import SafeConfigParser
config = SafeConfigParser()
import os;print os.getcwd()
config.read('misc.io.config.in.ini')

# List des sections
print config.sections()

# On récupère les unités pour la SST
print config.get('sst', 'units')
#  -> m/s

# La latitude max de la section par défaut
print config.defaults()['lat_max']
#  -> 50.0
# Latitude max de la sst = celle par défaut
print config.getfloat('sst', 'lat_max')+1
#  -> 51.0

# Subsitutions
# - contenu substitué
print config.get('wind', 'name')
#  -> Wind on Iroise
# - contenu brut
print config.get('wind', 'name', raw=True)
# -> Wind on %(zone)s
# - contenu substitué par la force
print config.get('wind', 'name',  vars=dict(zone='for Britanny'))
#  -> Wind on Britanny



# On vire une section
config.remove_section('wind')
# On en crée une autre
print config.has_section('sealevel')
#  -> False
config.add_section('sealevel')
config.set('sealevel','name', 'Sea level')
config.set('sealevel','units', 'm')
print config.has_option('sealevel', 'name')
#  -> True

# On sauvegarde
fc = open('misc.io.config.out.ini', 'w')
config.write(fc)
fc.close()

Fichier de configuration final :

[DEFAULT]
lat_min = 40.
lat_max = 50.
zone = Iroise

[sst]
name = Sea surface temperature on %(zone)s
units = C

[sealevel]
name = Sea level
units = m