我试图用神奇的python库pyparsing
解析一个文件,但是我遇到了很多问题。。。在
我试图解析的文件类似于:
sectionOne:
list:
- XXitem
- XXanotherItem
key1: value1
product: milk
release: now
subSection:
skey : sval
slist:
- XXitem
mods:
- XXone
- XXtwo
version: last
sectionTwo:
base: base-0.1
config: config-7.0-7
如您所见,是一个缩进的配置文件,这或多或少就是我试图定义语法的方式
我尝试使用pyparsing创建这个语法,但是没有成功。在
^{pr2}$结果是:
result1:
[['sectionOne', [[['list', ['XXitem', 'XXanotherItem']], ['key1', 'value1'], ['product', 'milk'], ['release', 'now'], ['subSection', [[['skey', 'sval'], ['slist', ['XXitem']], ['mods', ['XXone', 'XXtwo']], ['version', 'last']]]]]]], ['sectionTwo', [[['base', 'base-0.1'], ['config', 'config-7.0-7']]]]]
len 2
[
['sectionOne',
[[
['list', ['XXitem', 'XXanotherItem']],
['key1', 'value1'],
['product', 'milk'],
['release', 'now'],
['subSection',
[[
['skey', 'sval'],
['slist', ['XXitem']],
['mods', ['XXone', 'XXtwo']],
['version', 'last']
]]
]
]]
],
['sectionTwo',
[[
['base', 'base-0.1'],
['config', 'config-7.0-7']
]]
]
]
如你所见,我有两个主要问题:
1.-每个节内容嵌套到一个列表中两次
2.-键“version”在属于“sectionOne”时在“subSection”内解析
我的真正的目标是能够获得一个包含键和值的python嵌套字典的结构,以便轻松地提取每个字段的信息,但是pyparsing.Dict
对我来说很模糊。在
谁能帮帮我吗?在
提前谢谢
(抱歉发了这么长的帖子)
你真的很接近——恭喜你,缩进的解析器并不是最容易用pyparsing编写的。在
请看注释的更改。标记为“A”的更改是为了修复您所声明的两个问题。那些用“B”标记的添加Dict构造,这样您就可以使用config中的名称将解析的数据作为嵌套结构访问。在
最大的罪魁祸首是
indentedBlock
为您做了一些额外的分组,这妨碍了Dict的名称-值关联。使用ungroup
将其剥离,可以让Dict看到底层对。在祝pyparsing好运!在
现在,您可以编写以下内容,而不是
^{pr2}$pprint(result.asList())
:要显示Dict层次结构:
^{3}$允许您编写如下语句:
相关问题 更多 >
编程相关推荐