parsing python code

Ryan Krauss ryanlists at gmail.com
Wed Dec 5 12:02:35 EST 2007


I need to parse a Python file by breaking it into blocks matching
indentation levels so that function definitions, for loops, and
classes are kept together as blocks.  For example, if I have something
like

from scipy import*
from pylab import*

g = .6
Input_freq = 10.0

def load_data(path):
	data = loadtxt(path, skiprows = 1)
	t = data[:,0]
	Input = data[:,1]
	Output = data[:,2]
	return t,Input,Output

def time_plot(x,y,n = 1):
	figure(n)
	clf()
	for curx, cury in zip(x,y):
		plot(curx,cury)
	title('Time Plot')
	xlabel('time')
	ylabel('f(t)')
	legend(['Input','Output'],1)
	return figure(n)

t, Input, Output = load_data('system_data.txt')



I would like the blocks to be

block1 = ['from scipy import*', 'from pylab import*', 'g =
.6','Input_freq = 10.0']

block2 = ['def load_data(path):',
'	data = loadtxt(path, skiprows = 1)',
'	t = data[:,0]',
'	Input = data[:,1]',
'	Output = data[:,2]',
'	return t,Input,Output']

and so on.

I think the parser module should enable me to do this, but I can't
seem to figure it out.  Specifically, I think I need to use
parser.sequence2ast, but it doesn't work the way I think it should and
I can't find more documentation on it or an example that uses it.

I tried

f = open('Example.py','r')
mylines = f.readlines()
parser.sequence2ast(mylines)

but got a ParserError.

Is there an easy way to do what I need?

Thanks,

Ryan



More information about the Python-list mailing list