【问题标题】:Exclude Default Values from configuration file从配置文件中排除默认值
【发布时间】:2020-03-21 05:11:35
【问题描述】:

我正在尝试使用 python 从 config.ini 文件中导入 CONFIG 详细信息。我能够将所有详细信息放入字典中。但是,字典也包含 [DEFAULT] 值。 如何将 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/

【问题讨论】:

标签: python configuration


【解决方案1】:

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'}}

【讨论】:

    猜你喜欢
    • 2021-10-04
    • 2019-09-20
    • 2011-04-13
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多