1

这里使用 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 中优雅而紧凑地解析这个文件,即不为每个关键字正则表达式?

4

1 回答 1

1

除了将 '=>' 替换为 ':' 并添加顶级密钥之外,我在这里看不到与 json 的任何区别。

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

看到上面的评论后编辑。

不带引号的键确实不是 json 标准的一部分。为了解决这个问题,您可以使用此处描述的库,也可以对其进行正则表达式。

于 2018-11-25T02:08:23.267 回答