我想解析一个程序集文件,只提取操作码,剥离操作数。输入文件中的每一行都包含3个操作码。我应该在每行中的“[”之后提取第一个单词并在列表中累积吗?有没有更好的方法呢?
这是我的输入文件格式:
[slli a3,a3,4] [add.n a3,a3,a8] [l32i a11,a3,128]
[add.n a3,a3,a8] [l32i a11,a3,128] [l32r a9,0x1fff8954]
[l32i a11,a3,128] [l32r a9,0x1fff8954] [l32i.n a10,a11,4]
[l32r a9,0x1fff8954] [l32i.n a10,a11,4] [l8ui a8,a11,0]
我的预期输出应该是这样的:
[ slli : add.n : l32i ]
[ add.n : l32i : l32r ]
[ l32i : l32r : l32i.n ]
[ l32r : l32i.n : l8ui ]
答案 0 :(得分:2)
使用正则表达式很容易。
import re
pattern = re.compile(r'\[(\S+)')
output = []
with open('inputfile') as f:
for line in f:
output.append(pattern.findall(line))
现在您有一个操作码列表列表。
>>> from pprint import pprint
>>> pprint(output)
[['slli', 'add.n', 'l32i'],
['add.n', 'l32i', 'l32r'],
['l32i', 'l32r', 'l32i.n'],
['l32r', 'l32i.n', 'l8ui']]
然后可以处理此列表以产生所需的输出,例如
>>> for line in output:
... print '[ %s ]' % ' : '.join(line)
...
[ slli : add.n : l32i ]
[ add.n : l32i : l32r ]
[ l32i : l32r : l32i.n ]
[ l32r : l32i.n : l8ui ]
答案 1 :(得分:1)
查找操作码:
>>> import re
>>> re.findall(r'\[(?=([a-z0-9.]+))','[slli a3,a3,4] [add.n a3,a3,a8] [l32i a11,a3,128]')
['slli', 'add.n', 'l32i']
你应该把它包装成一个函数。