Seite 1 von 1

configparser mit Indexzahl aufrufen?

Verfasst: Samstag 12. Oktober 2013, 15:05
von Hellstorm
Hallo,

ist es irgendwie möglich, bei configparser einen Eintrag mit einem Index aufzurufen (Wahrscheinlich steh ich gerade nur total auf dem Schlauch und es ist eigentlich total einfach)?

Ich würde gerne alle Einträge in der Konfigurationsdatei auflisten und der Benutzer kann dann per Zahl den entsprechenden Eintrag auswählen, z.B. so:

1: Apfel
2: Birne
Auswahl: __

Aber irgendwie kann ich auf die einzelnen Einträge ja nur mit configparser_objekt["Apfel"] zugreifen. Ein configparser_objekt[0] geht irgendwie nicht. Wie könnte ich das denn machen? An einer anderen Stelle würde ich auch gerne, falls es nur einen Eintrag in der Konfigurationsdatei gibt, diese automatisch auswählen lassen, was ich ja eigentlich recht einfach mit dem Index 0 machen könnte (Falls es denn klappen würde).

Danke :)

Re: configparser mit Indexzahl aufrufen?

Verfasst: Samstag 12. Oktober 2013, 15:19
von Sirius3
Hallo Hellstrom,
»configparser«-Objekte verhalten sich wie Dictionaries:

Code: Alles auswählen

names = list(configparser_objekt)
for index, name in enumerate(names, 1):
    print('{0}: {1}'.format(index,name))
…
foo = configparser_objekt[names[selection-1]]

Re: configparser mit Indexzahl aufrufen?

Verfasst: Samstag 12. Oktober 2013, 15:32
von Hellstorm
Ah, ok, also muss ich das mit dem names in deinem Beispiel als Hilfe benutzen.

Danke :)

Re: configparser mit Indexzahl aufrufen?

Verfasst: Mittwoch 16. Oktober 2013, 14:36
von Hellstorm
Ich muss mich noch einmal zurückmelden :)

Ich bin da jetzt etwas anders dran und möchte einfach alle Einträge aus der Datei in eine neue Liste speichern, aber ohne dass die Wörterbuchstruktur kaputt geht. Aber irgendwie blick ich da nicht ganz durch. Im Moment habe ich das hier, aber das ist eher schlecht als recht:

Code: Alles auswählen

def gespeicherte_konfiguration_lesen(einstellungsdatei):
    """Liest gespeicherte Konfigurationen aus der Einstellungsdatei 
    und gibt sie zurück"""
    
    serverliste = []
    
    konfiguration = configparser.ConfigParser()
    konfiguration.read_file(open(einstellungsdatei))
    konfigurationsliste = list(konfiguration.sections())
    
    for eintrag in konfigurationsliste:
        einstellungsliste = konfiguration.items(eintrag)
        einstellungsliste.append(('name', eintrag))
        serverliste.append(einstellungsliste)
    
    return serverliste
Hier kriege ich dann als Ergebnis eine Liste wieder, in der die einzelnen Sektionen dann wiederum in einer Liste gespeichert sind, welche dann wieder jeweilig als Tuple die Einträge enthalten (hier im Beispiel jetzt nur ein Eintrag):

[[('host', '192.168.1.105'), ('port', '22'), ('benutzername', 'pi'), ('passwort', 'raspbian'), ('name', 'Raspberry')]]

Außerdem musste ich recht umständlich den Namen der Sektion hinten anfügen.

Wie kann ich denn recht einfach die einzelnen Sektionen aus der Konfigurationsdatei auslesen und dann in eine Liste speichern?

Das sollte dann nachher im Grunde so aussehen:

[{'host': '192.168.1.105', 'port': '22', 'benutzername': 'pi', 'passwort': 'raspbian', 'name': 'Raspberry'}, {'host': '192.168.1.106', 'port': '22', 'benutzername': 'pi', 'passwort': 'raspbian', 'name': 'Raspberry2'}]

Danke :)