Importer une liste depuis un fichier ini/cfg


#1

Bonjour,

Je rencontre un problème et je suppose que la cause serait que je ne sait pas importer correctement une liste depuis un fichier ini. Visiblement, les données sont récupérée sous la forme d’une chaîne de caractères.

mon fichier ini est écrit sous cette forme:

[liste_param]
ls_param =["ville","CdePost","latitude","longitude","altitude"]
ls_region=["metropole","Guadeloupe"]

je récupére les données de cette maniére:

def read_conf ():
    """ Chargement du fichier de configuration base de donnée d'un pays """
    conf= cfg_pays
    param = {}
    config = configparser.ConfigParser()
    config.read(conf)
    try:
        param["ls_region"] = config.get("liste_param","ls_region")
        param["ls_param"]  = config.get("liste_param","ls_param") 
        param["cfg_corupt"]= 0
    except:
        param["cfg_corupt"]= 1
    return param
params=read_conf()
cfg_corupt =params["cfg_corupt"]
if not cfg_corupt:
    ls_region  =params["ls_region"]
    ls_param   =params["ls_param" ]
    cfg_corupt =params["cfg_corupt"]
else:
    print("erreur critique avec", cfg_pays)
    print(progHS_msg)
    sys.exit(2)

#2

Bonjour,

Sachant que CongiParser ne connais que le type String, je vois plusieurs approches

1 - Utiliser un seul paramètre par option

2 - Récupérer les champs au format chaine de caractère et les transformer en liste avec la fonction “split”. Mais avant il faut supprimer les crochets “[” et “]” soit dans le fichier ini soit après récupération de la variable avec par exemple ls_param.replace ou plus simple ls_param[1:-1]

3 - Transformer le fichier .ini en format .json et utiliser la bibliothèque “json” plutôt que ConfigParser.

Bonne bidouilles

A+


#3

Bonjour,

Merci pour cet éclaircissement Jelopo.
Je vais réfléchir un peu sur la manière de corriger mon programme, pour le moment, je ne vois pas bien laquelle solution serait la plus adaptée à mon cas.


#4

Salut,
Le module configparser est plein de possibilités, mais pas toujours évident à manier. Notamment, il permet les valeurs sur plusieurs lignes (multilines), ce qui pourra peut-être t’aider (mais il faut lire la doc, assez longue, et en anglais).
Tu peux aussi mettre ta configuration dans un fichier config.py, que tu importes, et le tour est joué…
Exemple :
Script config.py :
ls_param = [“ville”,“CdePost”,“latitude”,“longitude”,“altitude”]
ls_region = [“metropole”,“Guadeloupe”]

Fichier test1.py :
from config import *
print(ls_param)
print(ls_region)

Entre autres avantages, tu as le contrôle syntaxique et les possibilités de python.