Py学习  »  Python

python:解析以冒号分隔的格式化字符串

Mark • 3 年前 • 1287 次点击  

我需要写一封信 python 脚本(我是一个新手) python 但我想将其作为一种实践)来解析以下格式的消息:

T:L:x1:x2:x3:...T1:L1:y1:y2:y3...Tn:Ln:z1:z2:z3:...

哪里 T 持有一种类型, L 是长度和x1。。xn是T1-Tn类型的实际数据。每个字符用 : 符号,所有值都以十六进制表示。

例如:

1:4:a:5:6:7:2:10:72:75:63:6f:6e:74:72:6f:6c:6c:65:72:2e:6f:72:67

(类型1=1,长度1=4,类型2=2,长度2=16(十六进制中的10))

解析后的消息应该存储在字典中(我认为这是最合适的数据结构,但我很高兴听到其他一些建议)。

所以我可能会拆分文本,提取类型和长度,再进一步提取 L 字节,并将其存储在 dict 具有 T 作为一把钥匙。

  1. 实际数据(例如x1-x3)必须存储在字典中 : 远离的。我不知道该怎么做。

我很想了解更有效的字符串解析方法。谢谢

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131825
 
1287 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Corralien
Reply   •   1 楼
Corralien    3 年前

创建一个 iterator 在你的绳子上:

message = '1:4:a:5:6:7:2:10:72:75:63:6f:6e:74:72:6f:6c:6c:65:72:2e:6f:72:67'

code = iter(message.split(':'))
data = {}

for t in code:
    l = int(next(code), 16)
    d = [next(code) for _ in range(l)]
    data[t] = d

输出:

>>> data
{'1': ['a', '5', '6', '7'],
 '2': ['72', '75', '63', '6f', '6e', '74', '72', '6f', '6c', '6c', '65', '72', '2e', '6f', '72', '67']}
anon01
Reply   •   2 楼
anon01    3 年前

像这样的方法应该有用:

ss = "1:4:a:5:6:7:2:10:72:75:63:6f:6e:74:72:6f:6c:6c:65:72:2e:6f:72:67".split(":")

d = {}
idx = 0
while idx < len(ss):
    key = ss[idx]
    idx += 1
    length = int(ss[idx])
    idx += 1
    arr = ss[idx:idx+length]
    d[key] = arr
    idx += length

输出 d :

{'1': ['a', '5', '6', '7'],
 '2': ['72', '75', '63', '6f', '6e', '74', '72', '6f', '6c', '6c'],
 '65': ['2e', '6f', '72', '67']}