Parsen von Listen mit Textfeldern

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
kstieger
User
Beiträge: 6
Registriert: Freitag 18. Juni 2010, 07:02

Hallo,

ich versuche eine Liste von Felddefinitionen in ein Python Dictionary zu parsen.

Hier ein Beisspiel für eine Felddefinition die ich bekomme:

Code: Alles auswählen

age type=Num min=5 max=99 default=21 optional=0 section="personal data" label="Age" desc="Please insert your age"
Ich würde das gerne in Dictionary parsen welches in etwa so ausschauen sollte:

Code: Alles auswählen

{'age': {'type': 'Num',
         'min': 5,
         'max': 99,
         'default': 21,
         'optional': False,
         'section': 'personal data',
         'label': 'Age',
         'desc': 'Please insert your age'}}
Grundsätzlich würd ich das Dictionary schon hinbekommen, wenn ich den String einfach 'splite'. Probleme bereiten mir die Textfelder die Leerzeichen enthalten (section, label, desc) und mit '"' begrenzt sind.
Ich habs mit tokenize versucht, schaff es aber nicht.
Hat bitte jemand einen Tipp für mich.

Besten Dank.
BlackJack

@kstieger: Vielleicht bringt Dich `shlex.split()` einen Schritt näher zum Wunschergebnis:

Code: Alles auswählen

In [39]: shlex.split(line)
Out[39]: 
['age',
 'type=Num',
 'min=5',
 'max=99',
 'default=21',
 'optional=0',
 'section=personal data',
 'label=Age',
 'desc=Please insert your age']
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@kstieger: Wer schreibt solche Definitionen? Wie werden " oder Sonderzeichen innerhalb der Strings behandelt?
Hier mal ein Parser mit einem regulären Ausdruck:

Code: Alles auswählen

>>> dict(re.findall(r'(\w+)=("[^"]*"|\S+)', line))
{'min': '5', 'default': '21', 'max': '99', 'section': '"personal data"', 'label': '"Age"', 'optional': '0', 'type': 'Num', 'desc': '"Please insert your age"'}
Antworten