2017-01-13 147 views
0

ini文件:ConfigParser得到與重複所有按鍵

[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

這是Python 2中配置解析器工作的一個問題。鍵值對被轉換成字典。這意味着每個鍵必須是唯一的。 如果您有多個密鑰,則「最後一次獲勝」。

嘗試在Python 3.5的例子中,給出了這樣的錯誤消息:

DuplicateOptionError: While reading from 'config.ini' [line 4]: 
option 'key_1' in section 'main' already exists 

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

幸運的是,爲Python 2只是一個補丁包:

pip install configparser 

該庫在Python 3.5帶來的更新configparser到Python 2.6-3.5。現在

,使用這樣的:

from configparser import ConfigParser 

這是Wikipedia說,關於重複:

名稱重複

大多數實現只支持具有給出名稱的屬性在一個部分。屬性名稱的第二次出現可能會導致中止,可能會被忽略(並丟棄該值),或者可能會覆蓋第一次出現(丟棄第一個值)。某些程序使用重複的屬性名稱來實現多值屬性。

具有相同名稱的多部分聲明的解釋也各不相同。在一些實現中,重複部分簡單地將它們的屬性合併在一起,就好像它們連續發生一樣。其他人可能會中止,或者忽略INI文件的某些方面。

+0

這不是我的解決方案。此操作的要點是檢查配置文件中的重複項並顯示它 – oleksii

+0

重複項應該是錯誤的。正在檢查錯誤的ini文件? –

+0

重複應該是一個錯誤 - 這不是一個錯誤。 ConfigParser會跳過重複項並只顯示最後一個鍵值對。 (在Python 2.7中) – oleksii