![]() |
best way to read a configuration file
Hi All, i am wondering about the best way to read in a configuration file that goes like: ########### [users] source_dir = '/home/karthik/Projects/python' data_dir = '/home/karthik/Projects/data' result_dir = '/home/karthik/Projects/Results' param_file = $result_dir/param_file res_file = $result_dir/result_file comment = 'this is a comment' K = 8 simulate_K = 0 N = 4000 mod_scheme = 'QPSK' Na = K+2 ###################### As of now i use config parser and i get this in a dictionary but a) but i have users.na and not users.Na (all the fields are in lower case) b) all the rhs arguements are string, but i have handled this by trying " try eval(rhs) ... except ..." block c) Na = 'K+2' though does not work, would like to have Na = 10, but i get users.na = 'K+2' d) result_file, param_file should actually be should be with pathname extensions filled in. Have looked in c.l.py none one ofthe suggestions was to use splitlines, this cant handle blank lines, other was to have config.py ... Hope to get some solution for this .. with warm regards karthik -- ----------------------------------------------------------------------- Karthikesh Raju, email: karthik@james.hut.fi Researcher, http://www.cis.hut.fi/karthik Helsinki University of Technology, Tel: +358-9-451 5389 Laboratory of Comp. & Info. Sc., Fax: +358-9-451 3277 Department of Computer Sc., P.O Box 5400, FIN 02015 HUT, Espoo, FINLAND ----------------------------------------------------------------------- |
Re: best way to read a configuration file
"Karthikesh Raju" <karthik@james.hut.fi> wrote in message
news:2dy8qimiwq.fsf@itl-pc87.hut.fi... > > Hi All, > > i am wondering about the best way to read in a configuration file that > goes like: > > ########### > > [users] > source_dir = '/home/karthik/Projects/python' > data_dir = '/home/karthik/Projects/data' > result_dir = '/home/karthik/Projects/Results' > param_file = $result_dir/param_file > res_file = $result_dir/result_file > comment = 'this is a comment' > > K = 8 > simulate_K = 0 > > N = 4000 > mod_scheme = 'QPSK' > > Na = K+2 > > ###################### > > As of now i use config parser and i get this in a dictionary but > > a) but i have users.na and not users.Na (all the fields are in lower > case) > > b) all the rhs arguements are string, but i have handled this by > trying " try eval(rhs) ... except ..." block > > c) Na = 'K+2' though does not work, would like to have Na = 10, but i > get users.na = 'K+2' > > d) result_file, param_file should actually be should be with pathname > extensions filled in. > > Have looked in c.l.py none one ofthe suggestions was to use > splitlines, this cant handle blank lines, other was to have config.py > .. > > Hope to get some solution for this .. > > with warm regards > > karthik > > > -- > > ----------------------------------------------------------------------- > Karthikesh Raju, email: karthik@james.hut.fi > Researcher, http://www.cis.hut.fi/karthik > Helsinki University of Technology, Tel: +358-9-451 5389 > Laboratory of Comp. & Info. Sc., Fax: +358-9-451 3277 > Department of Computer Sc., > P.O Box 5400, FIN 02015 HUT, > Espoo, FINLAND > ----------------------------------------------------------------------- |
Re: best way to read a configuration file
"Karthikesh Raju" <karthik@james.hut.fi> wrote in message
news:2dy8qimiwq.fsf@itl-pc87.hut.fi... > > Hi All, > > i am wondering about the best way to read in a configuration file that > goes like: > > ########### > > [users] > source_dir = '/home/karthik/Projects/python' > data_dir = '/home/karthik/Projects/data' > result_dir = '/home/karthik/Projects/Results' > param_file = $result_dir/param_file > res_file = $result_dir/result_file > comment = 'this is a comment' > > K = 8 > simulate_K = 0 > > N = 4000 > mod_scheme = 'QPSK' > > Na = K+2 > > ###################### > > As of now i use config parser and i get this in a dictionary but > > a) but i have users.na and not users.Na (all the fields are in lower > case) > > b) all the rhs arguements are string, but i have handled this by > trying " try eval(rhs) ... except ..." block > > c) Na = 'K+2' though does not work, would like to have Na = 10, but i > get users.na = 'K+2' > > d) result_file, param_file should actually be should be with pathname > extensions filled in. > > Have looked in c.l.py none one ofthe suggestions was to use > splitlines, this cant handle blank lines, other was to have config.py > .. > > Hope to get some solution for this .. > > with warm regards > > karthik > > > -- > > ----------------------------------------------------------------------- > Karthikesh Raju, email: karthik@james.hut.fi > Researcher, http://www.cis.hut.fi/karthik > Helsinki University of Technology, Tel: +358-9-451 5389 > Laboratory of Comp. & Info. Sc., Fax: +358-9-451 3277 > Department of Computer Sc., > P.O Box 5400, FIN 02015 HUT, > Espoo, FINLAND > ----------------------------------------------------------------------- I modified the config parser that is included as an example that ships with pyparsing, by adding: iniLines = "\n".join( file("karthik.ini").readlines() ) config = inifile_BNF().parseString(iniLines) pprint.pprint( config.asList() ) for k in config.users.keys(): print k,":",config.users[k] This gives the following output: [['users', ['source_dir ', " '/home/karthik/Projects/python'"], ['data_dir ', " '/home/karthik/Projects/data'"], ['result_dir ', " '/home/karthik/Projects/Results'"], ['param_file ', ' $result_dir/param_file'], ['res_file ', ' $result_dir/result_file'], ['comment ', " 'this is a comment'"], ['K ', ' 8'], ['simulate_K ', ' 0'], ['N ', ' 4000'], ['mod_scheme ', " 'QPSK'"], ['Na ', ' K+2']]] comment : 'this is a comment' data_dir : '/home/karthik/Projects/data' mod_scheme : 'QPSK' Na : K+2 K : 8 simulate_K : 0 N : 4000 res_file : $result_dir/result_file result_dir : '/home/karthik/Projects/Results' source_dir : '/home/karthik/Projects/python' param_file : $result_dir/param_file This actually shows the 3 access modes to the results from a pyparsing parseString() operation: - as a raw list of tokens (optionally grouped into sublists, giving a parse tree) - as an object with attributes (note reference to 'config.users', also notice that keys are not converted to lower case) - as a dictionary (access to config.users[k] for each key k) The 2nd level keys could also be referenced using the form config.users.data_dir, config.users.comment, etc. pyparsing also comes with an expression parser and evaluator in its examples. With some creative merging of the two, I think you could in fairly short order have a config parser that would handle your Na = K+2 and res_file = "$result_dir..." config values. The pyparsing home page is at http://pyparsing.sourceforge.net. HTH, -- Paul |
Re: best way to read a configuration file
Sorry about that last null post, my fingers tripped over the send button
before I started typing my response. -- Paul |
Re: best way to read a configuration file
Thankx paul, will have to download pyparsing, will do in a short will
and try your trick, hope it works well :-) With warm regards karthik -- ----------------------------------------------------------------------- Karthikesh Raju, email: karthik@james.hut.fi Researcher, http://www.cis.hut.fi/karthik Helsinki University of Technology, Tel: +358-9-451 5389 Laboratory of Comp. & Info. Sc., Fax: +358-9-451 3277 Department of Computer Sc., P.O Box 5400, FIN 02015 HUT, Espoo, FINLAND ----------------------------------------------------------------------- |
Re: best way to read a configuration file
I kept this sample from an ealier thread or website. I don't have the
link nor can I give credit to the author. If you have some lattitude on the exact format of the config file, this may do the trick for you though: Python App Macro Lang class App: def __init__(self, name): self._name = name def name(self): return self._name i=123 macrosource = """ print app.name() i=1 if i==2: server="internal.blah.com" else: server="external.blah.com" """ code = compile(macrosource, '<string>', "exec") anApp = App('Global App Object') context = {} # populate context with fun things context["app"] = anApp exec code in context print "The server is:" + context["server"] if i != 123: raise "local variable 'i' changed" output = """ c:\cygwin\bin\sh -c "python PyAsMacroLang.py" Global App Object The server is:external.blah.com """ |
| All times are GMT. The time now is 07:27 PM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.