【问题标题】:ConfigParser removes quotes from empty valuesConfigParser 从空值中删除引号
【发布时间】:2017-12-11 16:01:12
【问题描述】:

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

并修改其中之一(例如属性 1)

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

我得到以下结果:

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

从空值中删除所有引号。

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

【问题讨论】:

    标签: python python-2.7 ini configparser


    【解决方案1】:
    init_values.set('STRINGS', 'property 1', '"world"')
    

    如果您查看您在此处所做的事情,您会明确地在值中添加引号。如果您要删除 world 周围的引号,您将得到以下输出:

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

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

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

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

    【讨论】:

    • 感谢您的称赞,我只是检查所有值并将''替换为'""'
    【解决方案2】:

    让我们有一个具有以下格式的 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', '')]
    

    【讨论】:

    • 但是如果我使用这种方法,我在 '=' 符号之后仍然什么都没有
    猜你喜欢
    • 2019-06-04
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多