Configfile Parser und Writer

Du hast eine Idee für ein Projekt?
Antworten
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mich würde eine XML version interessieren, denn ich habe selbst sowas gemacht, und es ist warscheinlich der schlechteste teil des ganzen programms.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Antworten