ConfigParser 从空值中删除引号

ConfigParser removes quotes from empty values

提问人:togarha 提问时间:7/7/2017 更新时间:7/7/2017 访问量:1712

问:

我有一个格式如下的 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.属性1)

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

我得到以下结果:

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

将删除空值中的所有引号。

我怎样才能强制使用引号,即使是空值?

python-2.7 ini 配置解析器

评论


答:

0赞 Jignesh Jarsaniya 7/7/2017 #1

让我们使用以下格式的 INI Windows 文件:

[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', '')]

评论

0赞 togarha 7/7/2017
但是,如果我使用这个 aproach,我继续在“=”符号之后什么都没有
1赞 poke 7/7/2017 #2
init_values.set('STRINGS', 'property 1', '"world"')

如果你看一下你在这里做什么,你就会显式地在值中添加引号。如果要删除周围的引号,则只会得到以下输出:world

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

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

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

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

评论

0赞 togarha 7/7/2017
感谢您的声明,我只是浏览了所有值并替换为'''""'