Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ConfigParser从空值中删除引号_Python_Python 2.7_Ini_Configparser - Fatal编程技术网

Python ConfigParser从空值中删除引号

Python ConfigParser从空值中删除引号,python,python-2.7,ini,configparser,Python,Python 2.7,Ini,Configparser,我有一个INI windows文件,格式如下: [STRINGS] property 1 = "hello" property 2 = "" PROPERTY 3 = "" [STRINGS] property 1 = "hello" property 2 = "" PROPERTY 3 = "" 但是如果我使用ConfigParser获取值 init_values= ConfigParser.RawConfigParser(allow_no_value=True) init_values.

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

[STRINGS]
property 1 = "hello"
property 2 = ""
PROPERTY 3 = ""
[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)

我得到以下结果:

[STRINGS]
property 1 = "world"
property 2 = 
PROPERTY 3 = 
将删除空值中的所有引号


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

让我们以具有以下格式的INI windows文件为例:

[STRINGS]
property 1 = "hello"
property 2 = ""
PROPERTY 3 = ""
[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', '')]
如果您看一下您在这里所做的事情,您将显式地向值添加引号。如果要删除
world
中的引号,则只需获得以下输出:

[STRINGS]
property 1 = world
property 2 =
property 3 =
这是因为INI文件实际上不使用引号来表示字符串值(因为每个值都是字符串)

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


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

,但是如果我使用此方法,我在“=”符号后仍然没有任何内容感谢大家的称赞,我只需遍历所有值并将
替换为