Мне нужно прочитать INI-файл, используя configparser, где имя раздела немного отличается в разных версиях файла (в зависимости от того, из какой ветви этот файл).
, поэтому в некоторых файлах имена разделовявляются:
[WEB - Component1_Build]
option1=foo
option2=bar
[WEB - Component2_Build]
option3=foo
option4=bar
[WEB - Component3_Build]
option5=foo
option6=bar
В приведенном выше примере все компоненты были собраны из «ветви по умолчанию».
Но в другом файле, который должен обрабатывать тот же код, имена разделовможет быть:
[WEB - Component1_Build - my_feature_branch]
option1=foo
option2=bar
[WEB - Component2_Build]
option3=foo
option4=bar
[WEB - Component3_Build - my_feature_branch]
option5=foo
option6=bar
В вышеприведенном примере компоненты 1 и 3 построены из ветви функций, а компонент 2 построен из ветви по умолчанию.
Другой пример,
[WEB - Component1_Build - prod_release_branch]
option1=foo
option2=bar
[WEB - Component2_Build - prod_release_branch]
option3=foo
option4=bar
[WEB - Component3_Build - prod_release_branch]
option5=foo
option6=bar
[WEB - Component4_Build - prod_release_branch]
option7=foo
option8=bar
В приведенном выше примере есть дополнительный компонент, но все строятся из ветки релиза.
В моем коде на Python я ищу использовать какой-то уровень или шаблонсовпадения или регулярные выражения для имен разделов, но я не уверен, как это сделать.
Я попытался найти файл configparser.SECTCRE, чтобы настроить поведение анализатора, но я не уверен, как это сделать. потренируйся.
config = configparser.ConfigParser()
# not sure if this is right
config.SECTCRE = re.compile(r"\[ *(?P<header>[^]]+?) *\]")
config.read("my_ini_file.ini")
print(config.sections())
# this works, but I would want to fetch the section using component name
print(config.options(config.sections()[0]))
# this doesn't work and I get an error
# error is: configparser.NoSectionError: No section: '(Component1)+'
print(config.options(r'(Component1)+'))
# these work, but I would want to fetch the section using component name
print(config.get(config.sections()[0], 'option1'))
print(config.get(config.sections()[0], 'option2'))
error is: configparser.NoSectionError: No section: '(Component1)+'