python:解析一个以冒号分隔的格式化字符串
python: parse a colon-separated formatted string
我需要编写一个 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
(Type1=1, Length1=4, Type2=2, Length2=16 (10 in hex))
解析后的消息应该存储在字典中(我认为这是最合适的数据结构,但我很乐意听到其他建议)。
所以我可能会拆分文本,提取类型和长度,进一步提取 L
字节并将它们存储在 dict
中,以 T
作为键。
- 所以我会运行一个循环,如何判断字符串的结束,从而跳出循环?
- 实际数据(例如 x1-x3...)必须存储在字典中并删除
:
。我不确定该怎么做。
如果能了解更有效的字符串解析方法,我将不胜感激。谢谢!
像这样的东西应该可以工作:
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']}
在您的字符串上创建一个 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']}
我需要编写一个 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
(Type1=1, Length1=4, Type2=2, Length2=16 (10 in hex))
解析后的消息应该存储在字典中(我认为这是最合适的数据结构,但我很乐意听到其他建议)。
所以我可能会拆分文本,提取类型和长度,进一步提取 L
字节并将它们存储在 dict
中,以 T
作为键。
- 所以我会运行一个循环,如何判断字符串的结束,从而跳出循环?
- 实际数据(例如 x1-x3...)必须存储在字典中并删除
:
。我不确定该怎么做。
如果能了解更有效的字符串解析方法,我将不胜感激。谢谢!
像这样的东西应该可以工作:
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']}
在您的字符串上创建一个 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']}