提问人:togarha 提问时间:7/7/2017 更新时间:7/7/2017 访问量:1712
ConfigParser 从空值中删除引号
ConfigParser removes quotes from empty values
问:
我有一个格式如下的 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 =
将删除空值中的所有引号。
我怎样才能强制使用引号,即使是空值?
答:
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
感谢您的声明,我只是浏览了所有值并替换为''
'""'
评论