Seite 1 von 1

Parsen von Listen mit Textfeldern

Verfasst: Sonntag 17. November 2013, 12:02
von kstieger
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.

Re: Parsen von Listen mit Textfeldern

Verfasst: Sonntag 17. November 2013, 12:48
von 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']

Re: Parsen von Listen mit Textfeldern

Verfasst: Sonntag 17. November 2013, 13:33
von Sirius3
@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"'}