Seite 1 von 1

ConfigParser: Reihenfolge der sections erzwingen

Verfasst: Dienstag 5. März 2013, 16:27
von SimPy
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.

Re: ConfigParser: Reihenfolge der sections erzwingen

Verfasst: Dienstag 5. März 2013, 16:44
von 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.

Re: ConfigParser: Reihenfolge der sections erzwingen

Verfasst: Dienstag 5. März 2013, 19:41
von SimPy
@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 :)