Python文本到树结构创建

时间:2014-11-25 08:59:37

标签: python parsing

我必须使用python执行文本解析,示例文本如下

04h; ParIsa.Front.Area[0].ub_Y (BYTE)
0Dh; ParIsa.Front.Area[0].ub_X (BYTE)
00h; ParIsa.Front.Area[0].ub_P1 (BYTE)
01h; ParIsa.Front.Area[0].ub_P2 (BYTE)
40h; ParIsa.Front.Area[1].ub_Y (BYTE)
0Eh; ParIsa.Front.Area[1].ub_X (BYTE)
00h; ParIsa.Front.Area[1].ub_P1 (BYTE)
01h; ParIsa.Front.Area[1].ub_P2 (BYTE)
03h; ParIsa.Side.Area[0].ub_Y (BYTE)
0Dh; ParIsa.Side.Area[0].ub_X (BYTE)
00h; ParIsa.Side.Area[0].ub_P1 (BYTE)
01h; ParIsa.Side.Area[0].ub_P2 (BYTE)
41h; ParIsa.Side.Area[1].ub_Y (BYTE)
15h; ParIsa.Side.Area[1].ub_X (BYTE)
00h; ParIsa.Side.Area[1].ub_P1 (BYTE)
01h; ParIsa.Side.Area[1].ub_P2 (BYTE)

有了这样的文本,我需要创建一个数据结构,以便我可以访问各个元素以及整个结构,例如

>> Side.Area[0].ub_X
'0x0d'

>> Front.Area
Area[0]
    ub_X = 0x0d
    ub_Y = 0x04
    ub_P1 = 0x00
    ub_P2 = 0x01
Area[1]
    ub_X = 0x0e
    ub_Y = 0x40
    ub_P1 = 0x00
    ub_P2 = 0x01

作为一个整体访问结构是困难的部分,树的创建在这里是否有用?你有任何建议或想法来实现这一点,请让我知道

1 个答案:

答案 0 :(得分:1)

鉴于输入的同质性,正则表达式可能是此处的首选解决方案。

import re
linere = re.compile(r"^(?P<value>[0-9a-fA-F]+)h; ParIsa\.(?P<name>[a-zA-Z.]+)\[(?P<index>\d+)\]\.(?P<attribute>[0-9a-zA-Z_]+) \(BYTE\)$")

然后,您可以将编译的正则表达式应用于每一行,并在匹配对象的.groupdict()结果上按名称访问感兴趣的部分。