2017-07-07 42 views
1

刪除引號我有以下格式的INI windows文件:ConfigParser從空值

[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) 

和值修改其中的一個(PE財產1 )

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

我得到以下結果:

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

從空值中刪除所有引號。

即使在空值中,我如何強制使用引號?

回答

0

讓我們有以下格式的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

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

如果你看看,你在這裏做什麼,你都明確地加上引號的值。如果你要刪除周圍world引號,你只得到以下輸出:

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

那是因爲INI文件不實際使用引號以突出字符串值(因爲每一個值是一個字符串)。

什麼可能是一個問題,但就是解析器明確承認""爲空字符串值和空字符串替換它,而周圍的其他值引號保持原樣。這是2.7解析器的一種內置行爲,如果不自己實現,就不能真正改變它。

請注意,在Python 3中,此行爲已更改,因此""被識別爲字符串'""'

+0

感謝您的讚賞,我只是通過所有的值並用''「'替換''''''' – togarha