Help needed with nested parsing of file into objects

richard pullenjenna10 at gmail.com
Mon Jun 4 16:20:28 CEST 2012


On Jun 4, 3:14 pm, Alain Ketterlin <al... at dpt-info.u-strasbg.fr>
wrote:
> richard <pullenjenn... at gmail.com> writes:
> > Hi guys i am having a bit of dificulty finding the best approach /
> > solution to parsing a file into a list of objects / nested objects any
> > help would be greatly appreciated.
>
> > #file format to parse .txt
> > [code]
> > An instance of TestArray
> >  a=a
> >  b=b
> >  c=c
> >  List of 2 A elements:
> >   Instance of A element
>
> [...]
>
> Below is a piece of code that seems to work on your data. It builds a
> raw tree, i leave it to you to adapt and built the objects you want. The
> assumption is that the number of leading blanks faithfully denotes
> depth.
>
> As noted in another message, you're probably better off using an
> existing syntax (json, python literals, yaml, xml, ...)
>
> -- Alain.
>
> #!/usr/bin/env python
>
> import sys
> import re
>
> RE = re.compile("( *)(.*)")
> stack = [("-",[])] # tree nodes are: (head,[children])
> for line in sys.stdin:
>     matches = RE.match(line)
>     if len(matches.group(2)) > 0:
>         depth = 1 + len(matches.group(1))
>         while len(stack) > depth:
>             stack[-2][1].append(stack[-1])
>             del stack[-1]
>             pass
>         stack.append( (matches.group(2),[]) )
>         pass
>     pass
> while len(stack) > 1:
>     stack[-2][1].append(stack[-1])
>     del stack[-1]
>     pass
>
> print(stack)

thank you both for your replies. Unfortunately it is a pre-existing
file format imposed by an external system that I can't
change. Thank you for the code snippet.


More information about the Python-list mailing list