2014-11-25 84 views
1

我有使用Python進行文本分析,示例文本是如下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

鑑於你輸入的均勻性,正則表達式可能是首選的解決方案在這裏。

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()結果訪問感興趣的部分。