python 解析:什么文件格式使用 `=>` 或如何读取自定义输入文件到 dict

python parsing: what file format uses `=>` OR how to read custom input files to dict

在使用 here 的 zmdp 求解器时,我遇到了一种我以前从未见过的时髦文件格式,它使用 => 进行赋值。我无法从包文档中找出它是什么格式(它说它是 "policy" 格式,但它必须基于更通用的东西)

{
  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 中),并且还阅读了 this blog post which has a huge variety of options for lexing and parsing (the tools that looked most promising for my example seemed to be parsimonious and parsy)。
然而,无论我能想到什么解决方案,都感觉像是在重新发明轮子,而词法分析和解析似乎对我正在尝试做的事情来说是一种矫枉过正。
我还发现 this Whosebug 问题,巧合的是它似乎也与使用 => 的格式有关。但是,由于在代码方面比较懒惰和简约,我不太喜欢正则表达式解决方案。我的直觉告诉我,必须有一个 3-4 行的解决方案来将输入文件写入 python dict 或类似有用的格式。特别是,我怀疑这已经是我不知道的某些格式的标准语法(显然不是 csv、json、yaml 或 xml)

因此问题是:以上是标准文件格式吗,如果是,那是什么?
如果不是,我如何在 Python3 中优雅而紧凑地解析此文件,即不对每个关键字进行正则表达式?

除了将“=>”替换为“:”并添加顶级键外,我看不出这里与 json 有任何区别。

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

看到上面的评论后编辑。

未加引号的键确实不是 json 标准的一部分。要解决这个问题,您可以使用 中描述的库,也可以使用正则表达式。