ConfigParser: writes a list but reads a string?
Larry Bates
larry.bates at websafe.com
Tue Jan 17 10:11:24 EST 2006
Terry Carroll wrote:
> It looks like ConfigParser will accept a list to be writing to the
> *.ini file; but when reading it back in, it treats it as a string.
>
> Example:
>
> ###############################
> import ConfigParser
> def whatzit(thingname, thing):
> print thingname, "value:", thing
> print thingname, "length:", len(thing)
> print thingname, type(thing)
>
> cfgfile = "cfgtest.ini"
> config1 = ConfigParser.ConfigParser()
> config1.add_section("test")
>
> t1 = range(1,11)
> config1.set("test", "testlist", t1)
> outfile=open(cfgfile,"w")
> config1.write(outfile)
> outfile.close()
>
> config2 = ConfigParser.ConfigParser()
> config2.read(cfgfile)
> t2 = config2.get("test","testlist")
>
> whatzit("t1", t1)
> whatzit("t2", t2)
>
> ###############################
>
> Output is:
>
> t1 value: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> t1 length: 10
> t1 <type 'list'>
> t2 value: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> t2 length: 31
> t2 <type 'str'>
>
> That is, t1 is a list of length 10, consisting of:
> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> and is written out; but t2 is read back in as a string
> "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
> of length 31.
>
> It took me a while to figure this out, since they looked identical in
> print statements.
>
> Is there a pythonic way to read in a list from a .INI file with
> ConfigParser? Is this expected behavior for ConfigParser? I would
> not expect this conversion; rather, an exception when trying to write
> the list if the list is not supported.
>
To read lists from .INI files I use following:
listvalues=INI.get(section, option).split(',')
where INI is an instance of ConfigParser
There is the problem of if list items contain commas.
-Larry Bates
More information about the Python-list
mailing list