社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

有没有一种简单的方法可以用python3替换带有特定十六进制值的类XML标记?

efox29 • 6 年前 • 1627 次点击  

我有一组数据,其结构类似于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)到十六进制版本(如b)。

我的想法是使用lxml编写类似XML的文件,并填充必要的相关区域,然后使用python读取文件,并使用基于代码手册/字典的字符串操作对标记执行替换。

最后,我在寻找一个看起来像

0x01 0x02 0x12 0xff 0x03 0x01 0xff 0xff

我的问题是:有没有更简单的方法?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/36938
 
1627 次点击  
文章 [ 1 ]  |  最新文章 6 年前
Andrej Kesely
Reply   •   1 楼
Andrej Kesely    6 年前

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