Python解析树状数据
我有一些来自字体的字形信息,格式如下:
(CHARACTER C T
(CHARWD R 0.6944475)
(CHARHT R 0.686111)
(COMMENT
(KRN C y R -0.027779)
(KRN C e R -0.083334)
(KRN C o R -0.083334)
(KRN C r R -0.083334)
(KRN C a R -0.083334)
(KRN C A R -0.083334)
(KRN C u R -0.083334)
)
)
有没有简单的方法可以用Python来解析这些信息?我之前用过BeautifulSoup,但它需要像<tag> </tag>
这样的嵌套标签信息。把这些信息转换成XML再转换回来并不难,但感觉这有点像是在重复造轮子。我该如何把这些信息放进一个可以操作的数据对象里,然后再输出呢?
2 个回答
2
这段话的意思是,它会把你的数据转换成Python可以使用的数据结构。不确定这是不是你想要的东西?
s = """(CHARACTER C T
(CHARWD R 0.6944475)
(CHARHT R 0.686111)
(COMMENT
(KRN C y R -0.027779)
(KRN C e R -0.083334)
(KRN C o R -0.083334)
(KRN C r R -0.083334)
(KRN C a R -0.083334)
(KRN C A R -0.083334)
(KRN C u R -0.083334)
)
)"""
s = re.sub("\)", "\),", s)
t = re.sub('([(,\s])(\w+)', '\\1"\\2",', s)
eval(t[:-1].replace('\\', ''))
6
你可以使用 pyparsing 这个库。你的例子看起来很像一种叫做 s-expression 的格式,而他们在 示例部分 有一个专门解析 s-expression 的工具:http://pyparsing.wikispaces.com/file/view/sexpParser.py