ConfigParser ohne [Section]

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
Zack
User
Beiträge: 47
Registriert: Dienstag 24. April 2007, 11:19

Hi,
gibt es eine Möglichkeit den ConfigParser ohne [Section's] arbeiten zu lassen. Ich habe hier eine Config-File (doxygen-conf) die ich gerne so einfach bearbeiten würde, wie ich es vom ConfigParser gewohnt bin. Diese besitzt leider keine [Section] sondern nur "Option = Parameter" und lässt sich daher von mir nicht einlesen.

Bin über jede Hilfe oder andere Lösungs-Vorschläge dankbar.
Gruß Zack
lunar

Nimm ConfigObj. Das hat auch eine angenehmere API und ist mächtiger.

Code: Alles auswählen

from configobj import ConfigObj
# repräsentiert die Zeilen einer Konfigurationsdatei (wie bei file.readlines)
lines = ['foo = bar\n',
         'test = 1\n']
config = ConfigObj(lines)
print config['foo'] # gibt bar aus
print config['test'] # gibt 1 aus
Zack
User
Beiträge: 47
Registriert: Dienstag 24. April 2007, 11:19

Hey lunar,
coole Sache, genau das was ich suche. Aber leider hab ich damit ein paar Probleme. In der Doku heißt es:

Code: Alles auswählen

from configobj import ConfigObj
config = ConfigObj(filename)
#
value1 = config['keyword1']
Leider ist da der Wurm drin, denn bei dem Aufruf schmiert's mir sofort ab

Folgendes habe ich versucht:

Code: Alles auswählen

from configobj import ConfigObj
config = ConfigObj("testfile")
Error:

Code: Alles auswählen

Traceback (most recent call last):
  File "<string>", line 192, in run_nodebug
  File "C:\wrun2\doxygen\2.py", line 3, in <module>
    config = ConfigObj("Doxyfile")
  File "C:\wrun2\doxygen\configobj.py", line 1252, in __init__
    raise error
configobj.ConfigObjError: Parsing failed with several errors.
First error at line 14.
Die testfile ist vorhanden und im selben Ordner. Auch mit abspath keine Chance.
Ich kann mir leider nicht erklären woran das liegt.
Gruß Zack
lunar

Der Traceback passt nicht zum Beispielcode. Der Beispielcode lädt "testfile", der Traceback deutet aber auf "Doxyfile" hin.

Ich halte mich mal an den Traceback, der sagt, dass die Konfigurationsdatei kein gültiges Format besitzt. Der erste Fehler wurde in Z 14 der Konfigurationsdatei gefunden. Allerdings steht das alles deutlich im Traceback... :roll:

Doxyfile ist offenbar keine gültige INI-Datei.

Näheres kann ich ohne die Konfigurationsdatei nicht sagen.

Nächstes mal solltest du übrigens tunlichst darauf achten, dass der gepostete Beispielcode auch zum Traceback passt.
Zack
User
Beiträge: 47
Registriert: Dienstag 24. April 2007, 11:19

Doxyfile war meine testfile. Hier mal ein Ausschnitt:

Code: Alles auswählen

# Doxyfile 1.5.3

#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING      = UTF-8
PROJECT_NAME           = XXXPROJECT_NAMEXXX
PROJECT_NUMBER         = XXXPROJECT_NUMBERXXX
OUTPUT_DIRECTORY       = XXXOUTPUT_DIRECTORYXXX
CREATE_SUBDIRS         = NO
OUTPUT_LANGUAGE        = XXXOUTPUT_LANGUAGEXXX
BRIEF_MEMBER_DESC      = YES
REPEAT_BRIEF           = YES
ABBREVIATE_BRIEF       = "The $name class " \
                         "The $name widget " \
                         "The $name file " \
                         is \
                         provides \
                         specifies \
                         contains \
                         represents \
                         a \
                         an \
                         the
ALWAYS_DETAILED_SEC    = NO
lunar

Das kann ConfigObj nicht lesen. Der Umbruch in Zeile 14 ff ist aus Sicht von ConfigObj ungültig. ConfigObj bricht anders um, nämlich ohne \ und mit anderer Einrückung.
Zack
User
Beiträge: 47
Registriert: Dienstag 24. April 2007, 11:19

Dann wird's wohl darauf hinauslaufen, dass ich mir nen eigenen Parser basteln muss :-(
Schade, aber trotzdem vielen Dank für die Hilfe. Werde ConfigObj sicher nochmal verwenden.
Gruß Zack
Antworten