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

Beitragvon nkoehring » Freitag 16. März 2007, 19:28

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder