从<key><val>中提取字典…<key><val>wired

2024-10-04 01:31:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在扩展一个用C编写的低级仿真器,在这里我必须发送和接收一些套接字电报。我不是在C中搞乱它,而是在一个嵌入式python脚本中进行扩展。这一部分很简单,但由于我不是一个熟练的python程序员,因此最终我倾向于使用一些相当优雅的代码。例如,解析wire编码字典的一部分

在电线上,字典是这样的:

<;3>&书信电报;Mkey3>&书信电报;456>&书信电报;Mkey2>&书信电报;Mval2>&书信电报;MKey1>&书信电报;MVal1>

假设有3个键值对:{MKey3:456,MKey2:MVal2,MKey1:MVal1}

我最终得到了这个实现,对于测试来说已经足够好了,但是我很好奇它能简单到什么程度

    tiddata = '<3><Mkey3><456><Mkey2><Mval2><MKey1><MVal1>'
    q1 = re.compile('^\<(?P<idatacnt>[^\>]*)\>(?P<idataload>.*)$')
    m1 = q1.search(tiddata)
    r1 = m1.groupdict()

    tidload = r1['idataload']
    tidcnt = int(r1['idatacnt'])

    tidata = {}
    q2 = re.compile ('\<(?P<k>[^\>]*)\>\<(?P<v>[^\>]*)\>')
    for m in q2.finditer(tidload):
        t = m.groupdict()
        tidata[t['k']] = t['v']

    if len(tidata) != tidcnt:
        print('Invalid itemdata: <%s>' %tiddata)
        return

Tags: gtre字典电报compiler1q1书信