В соответствии с documentation параметр eol действительно больше не поддерживается при использовании версии 2.6 версии Python выше.
Пожалуйста, не обращайте внимания на мой предыдущий совет по использованию FileLike
. Это тоже не используется в python 2.6+!
Как вы должны обрабатывать данные, зависит от как выглядят данные. Поскольку вы не предоставили нам пример необработанных данных, я буду использовать формат от this page в качестве примера.
Формат данных в вышеупомянутом примере:
t: 2012.11.18 19:39:03 50A93957 +024.50 0189
t: 2012.11.18 19:39:13 50A93961 +024.50 0189
t: 2012.11.18 19:39:23 50A9396B +024.50 0188
Каждая строка имеет следующие столбцы:
- дата и время
- сырье дата и время в шестнадцатеричном
- значение температуры в градусах Цельсия
- значение температуры в гексагоне
Вы заметите, что каждое измерение начинается с «t:» и имеет шесть элементов, разделенных пробелами. Поэтому в этом случае я бы выполнил цикл, который работает следующим образом:
import serial
import time
buffer = bytes()
ser = serial.Serial('/dev/ttyACM0',9600, timeout=10)
while buffer.count('t:') < 2:
buffer += ser.read(30)
ser.close();
# Now we have at least one complete datum. Isolate it.
start = buffer.index('t:')
end = buffer.index('t:', start+1)
items = buffer[start:end].strip().split()
print items[1], items[2], items[4]
Пример. Поймите, что вы можете начать чтение в середине строки данных. Вы не можете предположить, что вы начинаете читать в начале строки.
In [23]: buffer = '39:03 50A9\r\nt: 2012.11.18 19:39:13 50A93961 +024.50 0189\r\nt: 2012.11.18 19:39:23 50A9396B +024.50 0188'
Давайте проверим, сколько 't:' 'мы можем найти. (Вы также можете искать «\ г \ п» вместо этого. Все, что имеет значение в том, что у вас есть что-то разделительные линии с)
In [24]: buffer.count('t:')
Out[24]: 2
Поскольку мы имеем два разделителей, мы имеем по крайней мере одну точку данных. Выделим полную точку данных.
In [25]: buffer.index('t:')
Out[25]: 12
In [26]: buffer.index('t:', 12+1)
Out[26]: 58
Это то, что мы хотим видеть. Полная точка данных:
In [27]: buffer[12:58+1].strip().split()
Out[27]: ['t:', '2012.11.18', '19:39:13', '50A93961', '+024.50', '0189', 't']
In [28]: items = buffer[12:59].strip().split()
In [29]: print items[1], items[2], items[4]
2012.11.18 19:39:13 +024.50
Вы можете прочитать данные Arduino из '/ dev/ttyACM0' _without_ Python? [Здесь] (http://stackoverflow.com/questions/15450419/java-rxtx-code-to-connect-to-rfcomm0-is-not-working) - аналогичная проблема в Java. – angelatlarge
Можете ли вы показать нам содержимое 'read' (до разделения)? –
Да Я могу прочитать данные Arduino с экраном/dev/ttyACM0. И он показывает нормальные, правильные нуберы, все время, например, 21.89. Таким образом, есть только проблема с моим скриптом python. –