I have a project that has a non-standard file format something like:
var foo = 5
load 'filename.txt'
var bar = 6
list baz = [1, 2, 3, 4]
And I want to parse this into a data structure much like BeautifulSoup does. But this format isn’t supported by BeautifulSoup. What is the pythonic way to build a parse tree so that I can modify the values and re-write it out? In the end I would like to do something like:
data = parse_file('file.txt')
data.foo = data.foo * 2
data.write_file('file_new.txt')
Here is a solution using pyparsing… it works in your case. Beware that i’m not an expert therefore depending on your standards the code could be ugly… cheers
EDIT
I have modified the class to use
methods to mimic the ‘access to member’ syntax to parsed items as required by our poster. Enjoy!
PS
Overloading of the
method should be done with care to avoid interferences between setting of ‘normal’ attributes (class members) and the parsed items (that are accesses like attributes). The code is now fixed to avoid these problems. See the following reference http://code.activestate.com/recipes/389916/ for more info. It was funny to discover this!