T
Terry Carroll
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.
*.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.