我有一个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 =
删除空值中的所有引号。
即使在空值中,我如何强制使用引号?
答案 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', '')]