从配置文件中排除默认值

时间:2019-11-25 20:44:01

标签: python configuration

我正在尝试使用python从config.ini文件导入CONFIG详细信息。我能够将所有详细信息输入字典。但是,字典也包含[DEFAULT]值。 如何将默认配置排除在插入字典之外。

Python代码:

config = configparser.ConfigParser()
config.read("C:/config.ini")

dictionary = {}
for section in config.sections():
    dictionary[section] = {}
    for option in config.options(section):
            print(section, option, config.get(section, option))
            dictionary[section][option] = config.get(section, option)

配置文件:需要从插入中排除CONCEPT_REFERENCESCHEME

[DEFAULT]
CONCEPT_REFERENCE = http://www.xbrl.org/2003/arcrole/concept-reference
SCHEME = http://xbrl.org/entity/identification/scheme

[SQL]
SERVER_NAME = USER\MSSQLSERVER01
DATABASE = MYDB

[NAME]
path_to_log_file = C:/logs/
path_to_output_files = C:/Map/

1 个答案:

答案 0 :(得分:0)

answer

的帮助下
import configparser
from configparser import NoSectionError
from pprint import pprint
class ConfigParser(configparser.ConfigParser):
    """Can get options() without defaults
    """
    def options(self, section, no_defaults=False, **kwargs):
        if no_defaults:
            try:
                return list(self._sections[section].keys())
            except KeyError:
                raise NoSectionError(section)
        else:
            return super().options(section, **kwargs)

config = ConfigParser()
config.read("test.ini")
dictionary = {}
for section in config.sections():
        dictionary[section] = {}
        for option in config.options(section,no_defaults=True):
                dictionary[section][option] = config.get(section, option)

>>> {'NAME': {'path_to_log_file': 'C:/Arelle-master/arelle/plugin/ferc/data_migration/logs/',
          'path_to_output_files': 'C:/Arelle-master/arelle/plugin/ferc/data_migration/DATA_Map/'},
     'SQL': {'database': 'MYDB', 'server_name': 'USER\\MSSQLSERVER01'}}

如果您想在字典中包含[DEFAULT]部分属性,只是不要在循环中传递no_default=True

config = ConfigParser()
config.read("test.ini")
dictionary = {}
for section in config.sections():
        dictionary[section] = {}
        for option in config.options(section):
                # print(section, option, config.get(section, option))
                dictionary[section][option] = config.get(section, option)
pprint(dictionary)
{'NAME': {'concept_reference': 'http://www.xbrl.org/2003/arcrole/concept-reference',
          'path_to_log_file': 'C:/Arelle-master/arelle/plugin/ferc/data_migration/logs/',
          'path_to_output_files': 'C:/Arelle-master/arelle/plugin/ferc/data_migration/DATA_Map/',
          'scheme': 'http://xbrl.org/entity/identification/scheme'},
 'SQL': {'concept_reference': 'http://www.xbrl.org/2003/arcrole/concept-reference',
         'database': 'MYDB',
         'scheme': 'http://xbrl.org/entity/identification/scheme',
         'server_name': 'USER\\MSSQLSERVER01'}}