Разбор файла конфигурации неизвестной длины
Я нуб питон, который попал в ловушку. Мне нужно импортировать файл конфигурации, чтобы программа работала. Я использую configparser, конечно, но вот проблема, с которой я сталкиваюсь и не могу понять. Мой конфигурационный файл будет выглядеть примерно так
[Book1]
title = "Hello World"
status = "in"
location = "s2v14"
[Book2]
....
и это будет продолжаться до бесконечности. Моя проблема в том, как мне разобрать файл конфигурации, если я не знаю, что это за раздел или даже сколько разделов будет существовать. Цель этого приложения - дать мне возможность получить сообщение, когда статус книги изменится с внешнего на внутренний, а также отобразить все другие данные, связанные с этим разделом.
2 ответа
Обычно используют какой-то цикл для обработки неизвестного или переменного числа вещей. В этом случаеfor
цикл, управляемый количеством найденных секций, может быть использован, потому что послеConfigParser
Объект экземпляра прочитал и проанализировал файл, они и их число известны:
config = ConfigParser.ConfigParser()
with open('unknown.cfg') as cfg_file:
config.readfp(cfg_file) # read and parse entire file
for section in config.sections():
print 'section:', section
for option, value in config.items(section):
print ' {}: {}'.format(option, value)
Так что, если это был входной файл:
[Book1]
title = "Hello World"
status = "in"
location = "s2v14"
[Book2]
title = "Hello World II"
status = "out"
location = "s2v15"
Это будет вывод:
section: Book1
title: "Hello World"
status: "in"
location: "s2v14"
section: Book2
title: "Hello World II"
status: "out"
location: "s2v15"
Обратите внимание, что в ваших строках есть фактические разделители строк в кавычках, которые будут видны при их печати... что не является обычным способом хранения строк в файлах конфигурации. Если вы не можете изменить способ создания файлов конфигурации, то в зависимости от того, что вы делаете, вам может понадобиться удалить их вручную после того, как они были прочитаныConfigParser
объект (сvalue = value.strip('"')
).
Другой подход заключается в преобразовании всего файла конфигурации в словарь, как показано в этом ответе на вопрос о преобразовании.ConfigParser.items
в словарь словарей, который впоследствии можно будет снова обработать, перебирая содержимое словарей с помощьюfor
петля.
Для конфигурационного файла с неизвестной структурой.
Предполагая, что вы уже загрузили файл в анализатор с именем config
,
Получить список доступных разделов:
config.sections()
Зная раздел, получите список пар ключ-значение:
config.items('Book1')