根據documentation,當使用更高版本的Python 2.6版本時,eol參數確實不再受支持。
請忽略我以前的建議,使用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:'。 (你也可以搜索「\ 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
你可以從'/ dev/ttyACM0' _without_ Python讀取Arduino數據嗎? [這裏](http://stackoverflow.com/questions/15450419/java-rxtx-code-to-connect-to-rfcomm0-is-not-working)在Java中是一個類似的問題。 – angelatlarge 2013-03-17 08:11:29
你可以給我們看看'read'的內容(分割之前)嗎? – 2013-03-17 10:24:58
是的,我可以用屏幕/ dev/ttyACM0讀取Arduino數據。並且它顯示正常,正確的nubers,例如21.89。所以只有我的python腳本有問題。 – 2013-03-17 12:47:15