Eigene "config" Dateien gescheid parsen.

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
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Ich habe es so aehnlich geloest, wie PmaX vorschlug, aber wollte die config gern von der Systemumgebung "fern halten". Also baute ich es ein wenig anders.

Hier ein kleines Beispiel fuer eine Konfigurationsdatei:

Code: Alles auswählen

_menu_link = Tag(soup, "span", [("class", "menu_btn")])
_menu_header = Tag(soup, "span", [("class", "menu_header")])
_menu_spacer = Tag(soup, "hr", [("class", "menu_spacer")])
Und hier mein Parser, inspiriert durch den von pyGet:

Code: Alles auswählen

class Config(dict):
    def __init__(self, filename, sep='='):
        super(Config,self).__init__()
        self.load(filename, sep)

    def load(self, filename, sep):
        f = file(filename, 'r')
        for line in f:
            line = line[:line.find('#')].strip()
            if line.find(sep) > 0:
                data = [x.strip() for x in line.split('=')]
                data[0] = data[0].lower()
                if data[1][0] in ['"',"'"]:
                    data[1] = data[1].strip('"\'')
                elif data[1].lower() in ['true','false']:
                    data[1] = {'true':True,'false':False}[data[1].lower()]
                else:
                    data[1] = str(data[1])
                self[data[0]] = data[1]
        f.close()
...das "manko" und gleichzeitig aber auch die Staerke hier ist, dass man die Variablen zwar direkt abfragen, aber sie danach noch in ein eval() packen muss. Das sorgt dafuer, dass die Konfigurationsdatei alles verwenden kann, was dem eigentlichen Programm auch zur verfuegung steht.

MfG
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Antworten