2017-08-22 139 views
0

所以我在Python上編寫了一個代碼,通過RS232端口連接到我的計算機上。現在我得到該部分與下面的代碼工作:python分割字節字符串

import serial 

while True: 
    ser = serial.Serial('COM2', 9600, timeout = 1) 
    print(ser.name) 
    ser.write(b'w') 
    line = ser.readline() 
    print(line) 
    ser.close() 

每當我發送字節'w'的規模它發回的價值。看起來像這樣:

COM2 
b'  0.000 kg \r\n' 

它首先打印com端口的名稱和下一行接收到的數據。然而。我想將值(數字)隔離爲一個整數。

我試着使用:

line = ser.readline()[:-6] 
int(line) 

這擺脫所有的垃圾 「公斤\ r \ n」 個。並留下我們的數字。但是,當然,Python不會允許我將字節字符串更改爲整數。這可能是一個愚蠢的初學者問題,就像我的其他兩個帖子,但請耐心等待,我現在只編了2周左右。

+0

查找到['struct'模塊(HTTPS://docs.python .org/3/library/struct.html) –

回答

0

您猜測您必須將串行二進制讀取返回的字節轉換(即解碼)爲字符串,以便進一步解析。使用bytes.decode("ascii")應該在這裏(沒有奇怪的字符在視線)。

然後,轉換爲浮點數而不是int。此外,使用str.split更穩健的變化,如果你知道第一個字段是你的價值:

>>> line = b'  0.000 kg \r\n' 
>>> value = float(line.split()[0].decode("ascii")) 

結果0.0

+0

它的工作!所以你必須解碼它才能轉換它。我不得不改變它,因爲有時當測量值不穩定時秤會發送空行。這會導致錯誤。 –