Seite 1 von 1

Configfile Parser und Writer

Verfasst: Montag 13. Januar 2003, 23:01
von Dookie
Hallo,

ich habe mich die letzten Tage mit shlex beschäftigt und herausgekommen ist dabei ein Modul zum parsen und schreiben von Configfiles der Form:

Code: Alles auswählen

# Dies ist eine Kommentarzeile
option1 = "Hallo"
option2 = 4711 #mit kommentar dahinter
noch_eine_Option = 0
liste_von_Werten = "alpha", "beta", 3, 4
Das Configfile wird in ein von UserDictionary abgeleietes Objekt eingelesen und kann so sehr einfach ausgewertet und bearbeitet werden.

Wenn wer Interesse daran hat, und vielleicht Ideen oder Verbesserungen beisteuern will kann sich den Source als zip http://www.sol.at/fritz/python/ConfigDict.py.zip oder als *.gz http://www.sol.at/fritz/python/ConfigDict.py.gz herunterladen


Gruß

Dookie

Verfasst: Dienstag 14. Januar 2003, 22:19
von hans
Dookie hat geschrieben:ich habe mich die letzten Tage mit shlex beschäftigt und herausgekommen ist dabei ein Modul zum parsen und schreiben von Configfiles
Hi Dookie,

Da gibt es doch schon das Modul ConfigParser. In meiner Pythonhilfe war ein Direkter Hinweis auf dieses Modul. Setze ich schon seit geraumer Zeit ein und muß sagen, geht prima.

Ich gebe mal ein wenig Beispielcode.

Code: Alles auswählen

    
import ConfigParser

#Öffnen der Configadtei
    self.config = ConfigParser.ConfigParser()
    self.config.read('./NorConfig.ini')

#Wert lesen
    s = str(self.config.get('DubiDu', 'Message'))

#schreiben der Configdatei
    s = 'Ich bin die Meldung aus DubiDu.Message'
    self.config.set('DubiDu', 'Message',  s)
    s = str(time.strftime('%d.%m.%Y %H:%M:%S %Z'))
    self.config.set('DubiDu', 'ModiTime', s)
Was ich mir dem shlex Modul anfangen könnte habe ich aber ehrlich gesagt nicht verstanden.

Hans

Verfasst: Dienstag 14. Januar 2003, 23:39
von Dookie
Hi Hans,

jo, das Modul ConfigParser hab ich auch durchgesehen, aber mir gehts auch darum, schon existierende Configfiles von Linuxtools auszulesen. Da stöst ConfigParser schnell an seine Grenzen, da es ja an die Windows inifiles angepasst ist.
Ausserdem ist mir das Auslesen der ConfigParser-Elemente auch nicht gerade Pythonlike.
Hier mal ein kleiner Beispielcode, wie es mit meinem Modul geht.

Code: Alles auswählen

from ConfigDict import ConfigDict

# Standartoptionen setzen
stdoptions = {"user" : "hans", "width" : "800", "height" : "600", "path" : ["/home/hans/", "home/hans/python"]}
multis = ["path"] # path kann mehrfach in der Config vorkommen

# config-Objekt erzeugen
config = ConfigDict(stdoptions, multis)

print config.stdoptions
# configfiles einlesen
config.parse(["/etc/test.conf", "/home/hans/.test.conf", "./test.conf"])

# Configuration anzeigen
for key, value in config.items():
    print key, " = ", value

# Configuration ändern
config["width"] = "640"
config["height"] = "480"

# Configuration speichern
config.store("./test.conf")
Hintergrund ist für mich auch, einen Parser für Povray-Inifiles zu machen, was mit meinem Modul recht einfach geht.


Gruß

Dookie

PS: hab jetzt noch ein Update hochgeladen, bei fehlenden Configfiles wird eine Warnung auf stderr ausgegeben und die Parsefunktion gibt 0 (false) zurück.

Verfasst: Donnerstag 16. Januar 2003, 20:55
von Dookie
Hallo nochmal,

ich hab das Modul jetzt in einer neuen Version hochgeladen, Jetzt brauchen multiple Configfiles nicht mehr in einer Liste an ConfigDict.parse übergeben zu werden. Auch hab ich noch ein paar kleine Bugs gefunden und Strings mit Leerzeichen oder Linefeeds werden speziell behandelt.

Gruß

Dookie

Verfasst: Freitag 5. September 2003, 08:53
von Leonidas
Mich würde eine XML version interessieren, denn ich habe selbst sowas gemacht, und es ist warscheinlich der schlechteste teil des ganzen programms.

Verfasst: Freitag 5. September 2003, 12:44
von Dookie
Hi Leonidas,

für XML gibts ja schon diverse Module, die mit Python mitgeliefert werden. Durch die Baumstrukktur von XML ist das Parsen doch anders als bei einfachen Configfiles. Schau Dir am Besten die Beispiele zu XML-Verarbeitung in der Doku an.


Gruß

Dookie