On Mar 22, 9:11 pm, rh0dium <[EMAIL PROTECTED]> wrote: > Hi all, Hi,
> I am struggling with parsing the following data: > > test1 = """ > Technology { > name = "gtc" > dielectric = 2.75e-05 [...] I know it's cheating, but the grammar of your example is actually quite simple and the values are valid python expressions, so here is a solution without pyparsing (or regexps, for that matter). *WARNING* it uses the exec statement. from textwrap import dedent def parse(txt): globs, parsed = {}, {} units = txt.strip().split('}')[:-1] for unit in units: label, params = unit.split('{') paramdict = {} exec dedent(params) in globs, paramdict try: label, key = label.split() parsed.setdefault(label, {})[eval(key)] = paramdict except ValueError: parsed[label.strip()] = paramdict return parsed >>> p = parse(test1) >>> p['Layer']['PRBOUNDARY'] {'maskName': '', 'defaultWidth': 0, 'color': 'cyan', 'pattern': 'blank', 'layerNumber': 0, 'minSpacing': 0, 'blink': 0, 'minWidth': 0, 'visible': 1, 'pitch': 0, 'selectable': 1, 'lineStyle': 'solid'} >>> p['Layer']['METAL2']['maskName'] 'metal2' >>> p['Technology']['gridResolution'] 5 >>> HTH -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list