簡體   English   中英

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

(類型 1=1,長度 1=4,類型 2=2,長度 2=16)

解析后的消息應該存儲在字典中(我認為這是最合適的數據結構,但我很高興聽到其他一些建議)。

所以我可能會拆分文本,提取類型和長度,進一步提取L個字節並將它們存儲在一個以T為鍵的dict

  1. 所以我會運行一個循環,我如何確定字符串的結尾,以便我可以跳出循環?
  2. 實際數據(例如 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

#                         v--- I replaced 10 by 12
message = '1:4:a:5:6:7:2:12:72:75:63:6f:6e:74:72:6f:6c:6c:65:72:2e:6f:72:67'

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

l = 0
for t in code:
    l += int(next(code))
    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']}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM