Разбор Python: какой формат файла использует `=>` ИЛИ как читать пользовательские входные файлы для диктовки - PullRequest
0 голосов
/ 25 ноября 2018

При использовании решателя zmdp из здесь я натолкнулся на странный формат файла, которого я раньше не видел, он использует => для назначения.Я не смог выяснить, какой это был формат из документации к пакету (он говорит, что это «политический» формат, но он должен основываться на чем-то более общем)

{
  policyType => "MaxPlanesLowerBound",
  numPlanes => 7,
  planes => [
    {
      action => 2,
      numEntries => 3,
      entries => [
        0, 18.7429,
        1, 18.7426,
        2, 21.743
      ]
    },
    ### more entries ###
    {
      action => 3,
      numEntries => 3,
      entries => [
        0, 20.8262,
        1, 20.8261,
        2, 20.8259
      ]
    }
  ]
}

Я много исследовало том, что было бы простым способом для анализа таких файлов (в Python), а также прочитайте это сообщение в блоге , которое имеет огромное разнообразие вариантов лексирования и синтаксического анализа (инструменты, которые выглядели наиболее многообещающими для моего примера, казалисьбыть скупым и сарказмом ).
Однако при любых решениях, которые я могу придумать, мне просто кажется, что я заново изобретаю колесо, а лексизм и разбор кажутсяизлишним для того, что я пытаюсь сделать.
Я также нашел этот вопрос stackoverflow, который, по совпадению, кажется, также связан с форматом, который использует =>.Однако, будучи ленивым и минималистичным, когда дело доходит до кода, мне не очень нравится решение регулярных выражений.Мои интуитивные ощущения говорят мне, что должно быть решение из 3-4 строк, чтобы записать входной файл в python dict или аналогичный полезный формат.В частности, я подозреваю, что это уже стандартный синтаксис некоторого формата, о котором я просто не знаю (это явно не CSV, JSON, YAML или XML)

Вопрос , следовательно, таков:Выше приведен стандартный формат файла, и если да, что это?
Если нет, то как мне элегантно и компактно проанализировать этот файл в Python3, т.е. без регулярного выражения для каждого ключевого слова?

1 Ответ

0 голосов
/ 25 ноября 2018

Я не вижу здесь никаких отличий от json, кроме замены '=>' на ':' и добавления ключа верхнего уровня.

filestr.replace(‘=>’, ‘:’)
dictionary = json.loads(filestr)

Отредактировано после просмотра комментария выше.

Ключи без кавычек действительно не являются частью стандарта json.Чтобы решить эту проблему, вы можете использовать библиотеку, как описано здесь , или вы можете переопределить ее.

...