2017-03-31 1 views
0

j'ai un file.ini structuré comme ceci:valeur Sortir de ConfigParser au lieu de chaîne

item1 = a,b,c 
item2 = x,y,z,e 
item3 = w 

et mon ConfigParser est fixé comme suit:

def configMy(filename='file.ini', section='top'): 
    parser = ConfigParser() 
    parser.read(filename) 
    mydict = {} 
    if parser.has_section(section): 
     params = parser.items(section) 
     for param in params: 
      mydict[param[0]] = param[1] 
    else: 
     raise Exception('Section {0} not found in the {1} file'.format(section, filename)) 
    return mydict 

en ce moment « mondict » est de retour paires clé-valeur de chaînes, à savoir: {'item1': 'a,b,c', 'item2': 'x,y,e,z', 'item3':'w'}

comment puis-je le modifier pour retourner la valeur sous forme de liste? comme ceci: {'item1': [a,b,c], 'item2': [x,y,e,z], 'item3':[w]}

+0

vous pourriez la sous-classe 'ConfigParser' et remplacer la méthode' _read' ainsi que mettre à jour la 'RawParser.OPTCRE' regex (qui est utilisé pour l'analyse des lignes d'option). Mais le moyen le plus simple et le plus fiable est probablement de faire un '.split (',')' dans votre code. – FamousJameous

+0

en ajoutant .split (',') à param [1] travaillé! Si vous voulez répondre à la question, je la marquerai comme acceptée. – Acoustic77

Répondre

1

Vous pouvez utiliser split sur les données analysées pour diviser la liste.

def configMy(filename='file.ini', section='top'): 
    parser = ConfigParser() 
    parser.read(filename) 
    mydict = {} 
    if parser.has_section(section): 
     params = parser.items(section) 
     for param in params: 
      mydict[param[0]] = param[1].split(',') 
    else: 
     raise Exception('Section {0} not found in the {1} file'.format(section, filename)) 
    return mydict 

Si nécessaire, vous pouvez alors ajouter un peu plus logique pour convertir à une valeur unique si la liste n'a qu'une seule valeur. Ou vérifiez les virgules dans la valeur avant de diviser.