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

问题描述 投票:0回答:1

当使用来自here的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中),还阅读了this blog post,它有很多选项用于lexing和解析(看起来最有希望的工具似乎是parsimoniousparsy)。 然而,无论我能想到什么解决方案,只是感觉我正在重新发明轮子,而lexing和解析似乎对我正在尝试做的事情来说太过分了。 我还发现了this stackoverflow问题,巧合似乎也与使用=>的格式有关。但是,在代码方面,我是懒惰和简约的,我不太喜欢正则表达式解决方案。我的直觉告诉我必须有一个3-4行解决方案将输入文件写入python dict或类似的有用格式。特别是,我怀疑这已经是我不知道的某种格式的标准语法(显然不是csv,json,yaml或xml)

因此问题是:以上是标准文件格式,如果是,它是什么? 如果没有,我如何在Python3中优雅而紧凑地解析这个文件,即不对每个关键字进行重复处理?

python regex parsing file-format parsimonious
1个回答
1
投票

除了用':'替换'=>并添加顶级键之外,我没有看到json与此有任何区别。

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

看到上面的评论后编辑。

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

© www.soinside.com 2019 - 2024. All rights reserved.