Config parser module

Q

qqcq6s59

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
 
D

Dale Strickland-Clark

The Config Parser module is for extracting data from and writing to a
specific format of file, generally known as a config file. As explained in
the documentation, a config file is in the same format as .ini files
frequently found on windows - especially used by older software.

It is a very handy file format for all sorts of jobs, more so on Linux these
days than Windows, probably. However, it isn't much use for your particular
need as described here.
 
L

Larry Bates

ConfigParser is for parsing configuration files of the format:

[section1]
option1=<information>
option2=<information>
..
..
..
optionN=<information>

[section2]
option1=<information>
option2=<information>
..
..
..
optionN=<informattion>

Your data doesn't fit that format.

Looks to me like you should write a small class object for
each different type of record that can be found in the file
that knows how to parse that record and put the information
from that record in to class attributes for easy access.

Something like:

class gridclass:
def __init__(self, recordToParse):
elements=recordToParse.split(' ')
self.type=elements[0]
self.pointId=int(elements[1])
self.coordinateSysNo=float(elements[2])
self.x=float(elements[3])
self.y=float(elements[4])
self.z=int(elements[5])


Then read the lines, determine the line type and create a class
instance for each one.

-larry
 
Q

qqcq6s59

Thanks a lot for Dale and Larry,

I have not tried the OOP way yet like you mentioned,
I will try to create a parser soon,
maybe I will post it in the net after that, it may be useful to others
too,

Thanks again
-Jiro
 
P

Paul McGuire

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
 
Q

qqcq6s59

wow,
Thanks alex, this rocks really, [ i am new to OOP style in python]
I am trying to implement it on similar lines,
I`ll comeback if I encounter any trouble.

thanks again
-Jiro



Paul said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,228
Members
46,818
Latest member
SapanaCarpetStudio

Latest Threads

Top