Мне нужно разобрать сложный файл конфигурации с помощью Python. Я должен отметить, что формат этих файлов - это то, что я не могу изменить, а скорее должен жить.Лучший способ разобрать сложный файл конфигурации
Основная структура файла заключается в следующем:
Keyword1
"value1"
thisisirrelevantforkeyword1
Keyword2
"first", "second", "third"
1, 2, 3
Keyword3
2, "whatever"
firstparam, 1
secondparam, 2
again_not_relevant
В конечном счете, выход из этого должен быть строкой в формате JSON.
Поясню:
- Каждое ключевое слово имеет свои собственные правила.
- Значения указаны в строке (-ях), следующей за ключевым словом.
- Например, Ключевое слово1 имеет одно значение, которое представляет собой строку value1. Строка, следующая за value1, не имеет значения.
- Например, Ключевое слово2 имеет два параметра, первый из которых представляет собой список строк, второй - список целых чисел.
- Например, Ключевое слово3 имеет переменное количество параметров, обозначаемое первым целым числом в первой строке после Ключевое слово3. Таким образом, параметры, релевантные для Ключевое слово3 - это список 2, «независимо» и два списка в двух следующих строках.
Существует фиксированный набор ключевых слов со своими правилами. Конечно, я мог бы в принципе жестко закодировать все это, что привело бы к многому дублированию кода. Кроме того, это было бы довольно негибким по отношению к новым ключевым словам или изменению правил для отдельных ключевых слов.
Я предпочел бы подготовить файл CSV, содержащий все ключевые слова, с правилом, как он определен, а затем использовать его как вход для более общей функции парсера.
Так что мой вопрос: - Как я могу указать правила простым способом? Я уверен, что для этого есть стандарты, но совершенно не знаю, с чего начать. - Как я мог использовать эту грамматику для разбора файла и создания моего JSON?
Я знаю, что это довольно конкретная, особая и сложная вещь; поэтому я уже был благодарен за указатели в правильном направлении, поскольку я чувствую себя немного потерянным и не уверен, с чего начать смотреть.
Вы должны, по крайней мере, принять удар на это. Используйте модель конечного автомата. Для каждой строки, если это ключевое слово, используйте процедуры разбора этого раздела. Если это не ключевое слово, перейдите к подпрограмме синтаксического анализа текущего раздела ключевого слова. Сообщите нам, что вы придумали. – mpez0