[Python-Dev] ConfigParser shootout, preliminary entry
Bengt Richter
bokr at oz.net
Tue Oct 19 00:06:35 EDT 2004
On Mon, 18 Oct 2004 21:22:47 -0300, Carlos Ribeiro <carribeiro at gmail.com> wrote:
>On Mon, 18 Oct 2004 22:43:16 GMT, Bengt Richter <bokr at oz.net> wrote:
>> Has anyone discussed using the csv module as the basic file interface for config data?
>
>I believe that CSV files are better suited for regular, table-like
>information, not for the type of data that is normally stored on INI
>files.
Why?
[segment]
sym=something
sam=other
maps trivially to
seg,segment
dat,sym,something
dat,sam,other
etc. E.g.,
>>> import csv, sys
>>> for line in csv.reader(sys.stdin): print line
...
seg,segment
dat,sym,something
dat,sam,other
# a comment
segname
,sym,something
,sam,somthing
# might be an alternative
^Z
['seg', 'segment']
['dat', 'sym', 'something']
['dat', 'sam', 'other']
['# a comment']
[]
['segname']
['', 'sym', 'something']
['', 'sam', 'somthing']
['# might be an alternative']
Very easy to deal with.
If you wanted an object with two-level attribute for access like conf.segment.sym, it would
be easy to build, e.g., (admittedly not very robust in this little demo hack ;-)
>>> import csv, sys
>>> conf = type('ConfData',(),{})()
>>> for line in csv.reader(sys.stdin):
... if not line: continue
... if line[0]:
... seg = type('SegData',(),{})()
... setattr(conf, line[0], seg)
... continue
... setattr(seg, line[1], line[2:])
...
segment
,sym,sym value
,sam,sam value
seg2
,a_float,f,1.0
,an_int,i,123
seg3
,msg1,how about this?
,msg2,pretty trivial
,msg3, ;-)
^Z
^Z
>>> vars(conf).keys()
['segment', 'seg3', 'seg2']
>>> vars(conf.segment).keys()
['sam', 'sym']
>>> vars(conf.seg2).keys()
['a_float', 'an_int']
>>> vars(conf.seg3).keys()
['msg1', 'msg3', 'msg2']
So we have the hierarchy:
>>> conf.segment.sam
['sam value']
>>> conf.seg2.an_int
['i', '123']
>>> conf.seg3.msg3
[' ;-)']
Obviously one could have recognized ['i', '123'] and made conf.seg2.an_int == 123
instead of a list. This is very expandable. E.g., it's not hard to imagine what
['img','url=http://www.python.org/pics/pythonHi.gif']
might mean as to how to get and convert such a data spec.
Regards,
Bengt Richter
More information about the Python-list
mailing list