Поскольку вы делаете config = ConfigParser.ConfigParser()
, то наверняка config
является экземпляром ConfigParser
.Он имеет все виды специальных методов, и предполагается, что остальная часть вашей программы сможет вызывать его.
Если вы не хотите изменять остальную часть вашей программы, вам следует настроить файл конфигурации YAML с помощьюв корне - отображение, ключами которого являются имена разделов в вашем INI-файле, а значения снова отображаются, представляющие пары ключ-значение каждого раздела:
section1:
key1: value1
key2: value2
section2:
key1: value3
key3: value4
Затем вы загружаете этот файл YAML ипреобразовать полученную структуру данных в экземпляр ConfigParser, который затем можно использовать в качестве чтения ConfigParser из файла INI:
import sys
import ruamel.yaml
from configparser import ConfigParser
yaml = ruamel.yaml.YAML(typ='safe')
with open('file.yaml', 'r') as stream:
data = yaml.load(stream)
config = ConfigParser()
config.read_dict(data)
config.write(sys.stdout)
, что дает:
[section1]
key1 = value1
key2 = value2
[section2]
key1 = value3
key3 = value4
То есть config
(при условииВаш file.yaml
имеет смысл), может быть передан остальной части программы.
Обратите внимание:
config.write()
только там, чтобы показать, что результат ConfigParser
Например, в финальной программе вам это не нужно. Ваш пример загрузки YAML не закрывает входной поток, что не является хорошей практикой.Используйте оператор with
или передайте pathlib.Path
в yaml.load
:
from pathlib import Path
file_name = Path('file.yaml')
yaml.load(file_name)
Можно напрямую загрузить экземпляр ConfigParser
, пометив отображение корневого уровня вваш файл YAML и обеспечивает соответствующую обработку тегов, но я не думаю, что это того стоит.Лучше было бы потратить ваше время, изменив остальную часть программы с принятия разделов на непосредственное обращение к data
(двухуровневая структура словаря).