我有一组数据结构类似于XML,但是数据不是ascii而是十六进制。
例如,数据可能是
EX. A
<body>
<entry1> 0x12 </entry1>
<entry2> 0x01 </entry2>
</body>
这可能会翻译成
EX. B
<0x01>
<0x02> 0x12 <0xff>
<0x03> 0x01 <0xff>
<0xff>
在上面的示例(示例B)中,<0x02> 0x12 <0xff>
表示entry1的值为0x12。
我不是本机python程序员,所以我可能会做很长一段路(如果比较容易,我会喜欢的),但是我想做的是从人类可读的结构(例如A)中获取。到十六进制版本(EX B)。
我的想法是使用lxml编写类似文件的XML,并填充必要的相关区域,然后使用Python读取文件,并使用基于代码簿/字典的标签对字符串进行字符串替换来执行替换。
最后,我正在寻找一个看起来像
的字节数组0x01 0x02 0x12 0xff 0x03 0x01 0xff 0xff
我的问题是:有没有更简单的方法?
答案 0 :(得分:1)
自定义html.HTMLParser
(doc)可能满足您的需求:
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def __init__(self):
super().__init__()
self.__tags = {}
self.__counter = 1
self.__result = []
def handle_starttag(self, tag, attrs):
if not tag in self.__tags:
self.__tags[tag] = '0x{:02x}'.format(self.__counter)
self.__counter += 1
self.__result.append(self.__tags[tag])
def handle_endtag(self, tag):
self.__result.append('0xff')
def handle_data(self, data):
self.__result.append(data.strip())
@property
def result(self):
return [v for v in self.__result if v]
parser = MyHTMLParser()
parser.feed('''<body>
<entry1> 0x12 </entry1>
<entry2> 0x01 </entry2>
</body>''')
print(' '.join(parser.result))
打印:
0x01 0x02 0x12 0xff 0x03 0x01 0xff 0xff