ConfigParser: Reihenfolge der sections erzwingen

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
SimPy
User
Beiträge: 20
Registriert: Dienstag 19. Februar 2013, 15:36

Hallo Python-Forum,

Problembeschreibung:
================
Ich erzeuge ein Object von ConfigParser. Darin erzeuge ich sections und weise diesen options mit values zu. Beim Speichern in einer Datei bemerke ich, dass die gespeicherte Reihenfolge der sections nicht derjenigen entspricht, die ich vorgebe. Dieses Thema wurde im Forum bereits in folgenden zwei Beiträgen angerissen: Beitrag1, Beitrag2. Meine Frage ist nun: Gibt es beim Schreiben der Datei vielleicht doch einen Trick, wie ich die Reihenfolge der sections erzwingen kann?

Code-Beispiel:
================

Code: Alles auswählen

import ConfigParser, os

config = ConfigParser.ConfigParser()                            # create object of class ConfigParser
# ----------------------------------------------
config.add_section("A")                                         # add section
config.add_section("B")                                         # add section
config.add_section("C")                                         # add section
# ----------------------------------------------
config.set("A", "OptionA", "ValueA")                            # add option and value to section
config.set("B", "OptionB", "ValueB")                            # add option and value to section
config.set("C", "OptionC", "ValueC")                            # add option and value to section
# ----------------------------------------------
with open('example.cfg', 'wb') as configfile:                   # write to file
  config.write(configfile)
Das führt zu folgender Ausgabe in der Datei:

Code: Alles auswählen

[A]
optiona = ValueA

[C]
optionc = ValueC

[B]
optionb = ValueB
Weiß jemand, ob ich die "richtige" Reihenfolge auf irgendeine Art erzwingen kann? Die Reihenfolge, die im Hintergrund in einem Dictionary gespeichert wird (hier "A", "C", "B" anstatt "A", "B", "C"), würde ich gerne vermeiden, da ich ein an einem bereits bestehenden Programm arbeite, in dem die Reihenfolge eine Rolle spielt.
BlackJack

@SimPy: Die Reihenfolge geht schon beim Einlesen verloren, weil da mit `dict` gearbeitet wird. Vielleicht ist configobj für Dich geeignet. Das behält nicht nur die Reihenfolge, sondern auch Kommentare.
SimPy
User
Beiträge: 20
Registriert: Dienstag 19. Februar 2013, 15:36

@BlackJack: Blitzschnell, einfach erklärt und absolut treffend: "5 von 5 Sternen"!

Ich habe nun "configobj" installiert und spiele damit herum. Es funktioniert sehr gut! Leider habe ich noch nicht herausgefunden, wie man eine Leerzeile zwischen den Sections einfügt. Es ist nicht zwingend notwendig, erleichtert aber die Lesbarkeit langer config-Dateien ein wenig. Ich habe mit "empty values" und

Code: Alles auswählen

config.write_empty_values = True

herumgespielt, jedoch nichts zustande gebracht. Weiß jemand, ob es doch geht? Falls nicht, dann kriegt die config-Datei eben keine Leerzeichen spendiert :)
Antworten