我必须使用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
作为一个整体访问结构是困难的部分,树的创建在这里是否有用?你有任何建议或想法来实现这一点,请让我知道
答案 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()
结果上按名称访问感兴趣的部分。