根据文档,使用更高版本的 Python 2.6 时确实不再支持 eol 参数。
请忽略我之前的使用建议FileLike
。这也没有在 python 2.6+ 中使用!
您必须如何处理数据取决于数据的外观。由于您没有向我们提供原始数据的示例,因此我将使用此页面中的格式作为示例。
上述示例中的数据格式为:
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:'。(你也可以搜索 '\r\n' 代替。重要的是你有一些东西可以用来分隔行)
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