Config parser module

Paul McGuire ptmcg at austin.rr._bogus_.com
Sat Sep 24 09:37:23 CEST 2005


<qqcq6s59 at gmail.com> wrote in message
news:1127489369.091513.206040 at g49g2000cwa.googlegroups.com...
> Hi all
> I am a newbie and I just saw a ongoing thread on Fileprocessing which
> talks abt config parser.
> I have writen many pyhton program to parse many kind of text files by
> using string module and regex. But after reading that config parser
> thread I feel stunned.
>
> Can somebody tell me some intro info how to parse huge data (most of
> them are input data to application softwares like nastran, abaqus etc)
>
> Recently I saw a great work by John on Nastran file parser (i am still
> trying to understand the program,
> http://jrfonseca.dyndns.org/svn/phd/python/Data/Nastran/
>
> An example of dat may be like this, (part of)
> (say point  id     coordinateSysNo x,y,z ...)
> GRID           1       12478.0  0.0     256.75         1
> GRID           2       12357.25 0.0     256.75         1
> GRID           3       12357.25 0.0     199.0          1
> (say Elementtype id  property point1 point 2 point3 point4 etc)
> CQUAD4      7231      21    5691    5700    5701    56920.0
>
> CQUAD4      7232      21    5692    5701    5702    56930.0
>
> CQUAD4      7233      21    5693    5702    5703    56940.0
>
> the data file is very complex if i consider all complexities)
>
> Is is possible to use config parser module insome way for this. I also
> have few perl parser (for some part for some particular tasks) and now
> changing them to python. (I feel perl regex combination is very easy to
> learn and very powerfull)
>
> Any information will be appreciated.
>
> -jiro
>

Here's some sample code that might give you some ideas.

-- Paul


data = """\
GRID           1       12478.0  0.0     256.75         1
GRID           2       12357.25 0.0     256.75         1
GRID           3       12357.25 0.0     199.0          1
CQUAD4      7231      21    5691    5700    5701    56920.0
CQUAD4      7232      21    5692    5701    5702    56930.0
CQUAD4      7233      21    5693    5702    5703    56940.0
"""

class Node(object):
    def __init__(self,s):
        self.__dict__.update( zip(self.getInitVarNames(), s.split()) )

    def __str__(self):
        return "%s %s" % (self.__class__.__name__, self.__dict__)

class GridNode(Node):
    def getInitVarNames(self):
        return "id,x,y,z,other".split(',')

class Cquad4Node(Node):
    def getInitVarNames(self):
        return "id,p1,p2,p3,p4,other".split(',')


# define mapping of leading keyword to class name
typeNodeClassMap = {
    "GRID" : GridNode,
    "CQUAD4" : Cquad4Node,
    }

def makeNode(s):
    nodeType,nodeArgs = s.split(" ",1)
    nodeClass = typeNodeClassMap[nodeType]
    return nodeClass( nodeArgs )

for line in data.split("\n"):
    if line:
        n = makeNode(line)
        print n






More information about the Python-list mailing list