ConfigParser获取具有重复项的所有密钥

时间:2017-01-13 18:03:35

标签: python parsing ini sections configparser

ini档案:

[main]
key_1=1
key_2=2
key_1=3

的Python:

config_parser = ConfigParser()
config_parser.optionxform = str
config_parser.read('config.ini')
for section in config_parser.sections():
    for key in dict(config_parser.items(section)):
        print key

结果:

key_1
key_2

预期结果:

key_1
key_2
key_1

如何实现这样的结果?

1 个答案:

答案 0 :(得分:1)

这是Python 2中的配置解析器工作方式的问题。键值对被转换为字典。这意味着每个密钥必须是唯一的。 如果您有多个键,则“最后一个值获胜”。

在Python 3.5中尝试您的示例,会出现以下错误消息:

pip install configparser 

所以不要多次使用相同的密钥。

幸运的是,Python 2有一个backport。只是:

configparser
  

该库将Python 3.5中更新的from configparser import ConfigParser 带到Python 2.6-3.5。

现在,使用这样:

var myurls = [
"http://example.com/grape.php",
"http://example.com/apple.php",
"http://example.com/orange.php",
"http://example.com/banana.php"];

这是Wikipedia关于重复的说法:

  

重复名称

     

大多数实现仅支持在一个部分中具有一个具有给定名称的属性。第二次出现属性名称可能会导致中止,可能会被忽略(并且值被丢弃),或者它可能会覆盖第一次出现(丢弃第一个值)。某些程序使用重复的属性名来实现多值属性。

     

对具有相同名称的多个部分声明的解释也各不相同。在一些实现中,重复的部分简单地将它们的属性合并在一起,就像它们连续发生一样。其他人可能会中止,或忽略INI文件的某些方面。