Python解析树状数据

1 投票
2 回答
1099 浏览
提问于 2025-04-17 04:07

我有一些来自字体的字形信息,格式如下:

(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

撰写回答