2016-09-16 11 views
-1

У меня есть несколько значений в строкеЧтение строк в Python

[AD6:0.02] [AD7:0.03] [AD8:0.19][AD3:6][AD0:22][AD1:22][AD4:48.00][AD5:0.01] [AD6:0.03] 

Я просто хочу, чтобы прочитать значения каждого «AD», как 0,02 в AD6, например. Строка меняется каждый раз, поэтому я не могу использовать «подстроку».

Вот мой код

while True: 

    data = ser.read(9999) 

    for x in data: 
     if ((x==':') & (x+1=='0')): 
      print 'Achou' 

ли кто-то есть идея о том, как я могу извлечь значение каждого AD и поместить его в переменную? (Он находится в цикле).

ответ

3

Использование re.findall() с надлежащим регулярным выражением:

In [80]: s = "[AD6:0.02] [AD7:0.03] [AD8:0.19][AD3:6][AD0:22][AD1:22][AD4:48.00][AD5:0.01] [AD6:0.03]" 

In [81]: regex = re.compile(r'AD\d:([\d.]+)') 

In [82]: regex.findall(s) 
Out[82]: ['0.02', '0.03', '0.19', '6', '22', '22', '48.00', '0.01', '0.03'] 

Если вы хотите, чтобы преобразовать значение плавать лучше использовать finditer(), который возвращает итератор, как объект и преобразовать совпавшие группы плавать, используя float() в пределах список понимание:

In [85]: [float(x.group(1)) for x in regex.finditer(s)] 
Out[85]: [0.02, 0.03, 0.19, 6.0, 22.0, 22.0, 48.0, 0.01, 0.03] 

Но обратите внимание, что это может поднять ValueError, если ваш номер не значащие цифры. В этом случае вам лучше использовать регулярный цикл и обрабатывать исключения с выражением try-except.

+0

хорошо, но эти значения не являются статичными, будучи более четкими, это температура и влажность, которые вы знаете? вы думаете, что это сработает? –

+1

@FelipeFerreiraMendes Почему это имеет значение? Если ваша строка находится в указанном вами формате, то этот ответ показывает, как извлекать значения, которые вы задали для –

+0

Хотя, видя '{'AD6': 0,02}, может быть лучший ответ –

Смежные вопросы