当使用来自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和解析(看起来最有希望的工具似乎是parsimonious和parsy)。
然而,无论我能想到什么解决方案,只是感觉我正在重新发明轮子,而lexing和解析似乎对我正在尝试做的事情来说太过分了。
我还发现了this stackoverflow问题,巧合似乎也与使用=>
的格式有关。但是,在代码方面,我是懒惰和简约的,我不太喜欢正则表达式解决方案。我的直觉告诉我必须有一个3-4行解决方案将输入文件写入python dict或类似的有用格式。特别是,我怀疑这已经是我不知道的某种格式的标准语法(显然不是csv,json,yaml或xml)
因此问题是:以上是标准文件格式,如果是,它是什么? 如果没有,我如何在Python3中优雅而紧凑地解析这个文件,即不对每个关键字进行重复处理?
除了用':'替换'=>并添加顶级键之外,我没有看到json与此有任何区别。
filestr.replace(‘=>’, ‘:’)
dictionary = json.loads(filestr)
看到上面的评论后编辑。
不带引号的密钥确实不是json标准的一部分。要解决这个问题,您可以使用here描述的库,也可以使用正则表达式。