configparser mit Indexzahl aufrufen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

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 :)
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

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]]
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

Ah, ok, also muss ich das mit dem names in deinem Beispiel als Hilfe benutzen.

Danke :)
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

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 :)
Antworten