在Python中解析\ x02和\ x03之间的行

时间:2018-06-10 11:32:52

标签: python string list find substring

我遇到了一个让我头痛的严重问题。

我有一个具有不同测量值的传感器日志文件,它们都出现在子字符串'\ x02'和'\ x03'之间。但这里开始我的问题。我怎样才能将子串之间的所有值都放到一个新列表中。由于有许多测量,不仅有一个测量应该提供与'\ x02'和'\ x03'一样多的列表。

为了让您快速了解Logfile在我将其读入python后的样子: ['\x02sEA LMDscandata 1\x03\x02sSN LMDscandata 0 1 10B2E77 0 0 5BB6 E4FC 5FA60C99 5FA8C92F F0 0 0 0 F5B2 3E8 1\x03']

我真的尝试了很多(搜索子字符串,搜索索引等等)并且无法帮助自己,我期待着你的建议。

谢谢你

EDIT1:

我需要在\ x02和\ x03语句之间分隔列表。使用示例:

['\x02sEA LMDscandata 1\x03\x02sSN LMDscandata 0 1 10B2E77 0 0 5BB6 E4FC 5FA60C99 5FA8C92F F0 0 0 0 F5B2 3E8 1\x03 \x02sSN LMDscandata 0 1 10B2E77 0 0 5BB6 E4FC 5FA60C99 5FA8C92F F0 0 0 0 F5B2 3E8 1\x03']

因此,第一个List应该看起来像'list1 = [sSN LMDscandata 0 1 10B2E77 0 0 5BB6 E4FC 5FA60C99 5FA8C92F F0 0 0 0 F5B2 3E8 1'],第二个列表与此类似。我需要一个for循环,但我无法想象如何实现它..

3 个答案:

答案 0 :(得分:1)

listfromreadlines = ['\x02sEA LMDscandata 1\x03\x02sSN LMDscandata 0 1 10B2E77 0 0 5BB6 E4FC 5FA60C99 5FA8C92F F0 0 0 0 F5B2 3E8 1\x03']
l1 = listfromreadlines[0]

items = [x.replace('\x02', "").replace('\x03', "") for x in l1.split('\x03\x02')] 

# Thinking you might have sub items between the delimiters, I can only assume
# they are split by spaces:
subitems = [x.split(" ") for x in items]

答案 1 :(得分:0)

与John的答案几乎相同,但更简单,更易读:

l1 = '\x02sEA LMDscandata 1\x03\x02sSN LMDscandata 0 1 10B2E77 0 0 5BB6 E4FC 5FA60C99 5FA8C92F F0 0 0 0 F5B2 3E8 1\x03'
items = l1.strip('\x03\x02').split('\x03\x02')
print(items)
# prints: ['sEA LMDscandata 1', 'sSN LMDscandata 0 1 10B2E77 0 0 5BB6 E4FC 5FA60C99 5FA8C92F F0 0 0 0 F5B2 3E8 1']

答案 2 :(得分:0)

我建议使用正则表达式:

>>> lines = ['\x02sEA LMDscandata 1\x03\x02sSN LMDscandata 0 1 10B2E77 0 0 5BB6 E4FC 5FA60C99 5FA8C92F F0 0 0 0 F5B2 3E8 1\x03']

>>> import re
>>> [s for line in lines for s in re.findall('\x02(.*?)\x03', line)]

['sEA LMDscandata 1', 'sSN LMDscandata 0 1 10B2E77 0 0 5BB6 E4FC 5FA60C99 5FA8C92F F0 0 0 0 F5B2 3E8 1']