Разбор строк между \ x02 и \ x03 в Python - PullRequest
0 голосов
/ 10 июня 2018

У меня серьезная проблема, которая вызывает у меня головную боль.

У меня есть файл журнала датчика с разными значениями измерения. Все они отображаются между подстрокой «\ x02» и «\ x03».Но тут начинается мой вопрос.Как я могу получить все значения между подстрок в новый список.Поскольку измерений много, а не только одно, должно быть столько списков, сколько существует \ x02 и \ x03.

Чтобы получить краткий обзор того, как выглядит файл журнала после того, как я прочитал его на python: ['\x02sEA LMDscandata 1\x03\x02sSN LMDscandata 0 1 10B2E77 0 0 5BB6 E4FC 5FA60C99 5FA8C92F F0 0 0 0 F5B2 3E8 1\x03']

Я действительно много пробовал (поиск подстрок, поиск индексов и т. Д.)) и не могу помочь себе, я с нетерпением жду ваших предложений.

СПАСИБО

РЕДАКТИРОВАТЬ1:

Мне нужны отдельные списки между операторами \ 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']

Таким образом, первый список должен выглядеть следующим образом 'list1 = [sSN LMDscandata 0 1 10B2E77 0 0 5BB6 E4FC 5FA60C99 5FA8C92F F0 0 0 0 F5B2 3E8 1'] и второй, как то же самое.Для этого мне нужен цикл for, но я не представляю, как это реализовать ..

Ответы [ 3 ]

0 голосов
/ 10 июня 2018

Почти так же, как и ответ Джона, но проще и понятнее:

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']
0 голосов
/ 10 июня 2018

Я предлагаю использовать регулярное выражение:

>>> 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']
0 голосов
/ 10 июня 2018
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]
...