ConfigParser从空值中删除引号

时间:2017-07-07 11:12:05

标签: python python-2.7 ini configparser

我有一个INI windows文件,格式如下:

[STRINGS]
property 1 = "hello"
property 2 = ""
PROPERTY 3 = ""

但如果我使用ConfigParser获取值

init_values= ConfigParser.RawConfigParser(allow_no_value=True)
init_values.optionxform = str
init_values.read(init_file)

并修改其中一个(p.e. property 1)

init_values.set('STRINGS', 'property 1', '"world"')
init_values.write(configfile)

我得到以下结果:

[STRINGS]
property 1 = "world"
property 2 = 
PROPERTY 3 = 

删除空值中的所有引号。

即使在空值中,我如何强制使用引号?

2 个答案:

答案 0 :(得分:1)

init_values.set('STRINGS', 'property 1', '"world"')

如果你看看你在这里做了什么,你明确地在这个值上添加引号。如果您要删除world周围的引号,您只需获得以下输出:

[STRINGS]
property 1 = world
property 2 =
property 3 =

这是因为INI文件实际上并没有使用引号来表示字符串值(因为每个值都是一个字符串)。

但可能存在的问题是解析器""显式识别为空字符串值并将其替换为空字符串,而其他值的引号保留原样。这是2.7解析器的内置行为,如果不自己实现,就无法真正改变。

请注意,在Python 3中,此行为已更改,因此""被识别为字符串'""'

答案 1 :(得分:0)

我们来看一个具有以下格式的INI窗口文件:

[STRINGS]
property 1 = "hello"
property 2 = ""
PROPERTY 3 = ""

您可以通过以下方式完成此操作。例如:

import ConfigParser

filename='config'
parser=ConfigParser.SafeConfigParser()
parser.read([filename])
print(parser.sections())
# ['section']
for section in parser.sections():
    print(parser.options(section))
    # ['id', 'rb', 'person']
    for option in parser.options(section):
        try:
            value=parser.getint(section,option)
        except ValueError:
            value=parser.get(section,option)
        print(option,value,type(value))
print(parser.items('section'))
# [('property1', 'world'), ('property2', ''), ('property3', '')]