2015-03-09 2 views
0

Использование python 2.7.5 и следующей строки. Я пытаюсь суммировать и со следующим кодом. Может ли кто-то направить меня в правильном направлении? СпасибоИсследовали модуль RE, не найдя решение

<msg><src>CC128-v0.15</src><dsb>01068</dsb><time>09:19:01</time><tmprF>68.9</tmprF><sensor>0</sensor><id>00077</id><type>1</type><ch1><watts>00226</watts></ch1><ch2><watts>00189</watts></ch2></msg> 

try: 
    watts_ex = re.compile('<watts>([0-9]+)</watts>') 
    temp_ex = re.compile('<tmprF>([\ ]?[0-9\.]+)</tmprF>') 
    time_ex = re.compile('<time>([0-9\.\:]+)</time>') 

    watts = str(int(watts_ex.findall(data)[0])) 
    temp = temp_ex.findall(data)[0].strip() 
    time = time_ex.findall(data)[0] 
except: 
    sys.stderr.write("Could not get details from device") 
    sys.exit() 

# Replace format string 
format = format.replace("{{watts}}", watts) 
format = format.replace("{{time}}", time) 
format = format.replace("{{temp}}", temp) 

print format 

if __name__ == "__main__": 
    main() 

""" output is 09:19:01:, 226 watts, 68.9F (watts should = 415 watts """ 
+0

Вы хотите, чтобы добавить значения '' вместе? В настоящее время вы просто получаете первый. – Sizik

+0

да, это то, что я пытаюсь сделать. Благодаря – Wallace

ответ

0

Это похоже на XML-подобный язык, я настоятельно рекомендую использовать XML-библиотеки вместо регулярных выражений для его анализа.

Проблема в коде эта часть:

watts = str(int(watts_ex.findall(data)[0])) 

Вы используете только результат 0 из findall(), я думаю, что вы хотите что-то вроде этого:

watts = str(sum(int(w) for w in watts_ex.findall(data))) 
+0

Wolph, Ваша новая линия производства следующее сообщение об ошибке: Файл "./current-cost3.py", строка 96 Темп = temp_ex.findall (данные) [0] .strip() ^ SyntaxError: недопустимый синтаксис – Wallace

+0

Ваш ответ работал после внесения некоторых других изменений в мой код. – Wallace

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