我正在编写一个python脚本,它将通过COM端口与Fluke仪表通信。我能够接收数据,但想将其解析为可用的浮点数。代码如下所示:
import serial
ser = serial.Serial('COM3', 115200, timeout=1)
#Decalring some variables
FlukeID = b'ID\r'
FlukeQM = b'QM\r'
#Requesting the meters ID to verify connection on terminal
ser.writelines(FlukeID)
line = ser.readline()
print(line)
#Declaring variables for my while loop
thermdata = 0
t=1
ser.writelines(FlukeQM)
thermdata = ser.readline()
while(t < 5):
ser.writelines(FlukeQM)
#thermdata = (thermdata + ser.readline()) /2
thermdata = ser.readline()
print(thermdata)
t+=1
设备返回的数据在控制台上如下所示:
8.597E3,OHM,NORMAL,NONE 不正确
编辑: 数据实际上在终端上显示如下: 的 为b'0 \ r8.597E3,OHM,NORMAL,NONE \ R'
我只是希望能够在开头使用数值,所以我可以随着时间的推移做一些计算。我还需要能够在我的号码中使用科学概念部分,因为我不知道我的测量范围。我知道必须有一个简单的方法来做到这一点,并非常感谢任何帮助。
另外,我还希望能够将这些值绘制成图形或将它们放入某种.csv文件中。如果你有什么意见可以学习如何做到这一点也很好,但我主要关心的是bytearray的处理。
答案 0 :(得分:2)
使用split()
将字符串分成逗号分隔的部分。然后第一部分是字符串'8.597E3',您可以使用float()
函数进行转换。
s = '8.597E3,OHM,NORMAL,NONE'.split(',')
value = float(s[0])
答案 1 :(得分:0)
如下:
def atof(text):
try:
return float(text)
except ValueError:
return text
thermdata = b'0\r8.597E3,OHM,NORMAL,NONE\r'
for line in thermdata.strip().split(b'\r'):
print(list(map(atof, line.split(b','))))
# [0.0]
# [8597.0, b'OHM', b'NORMAL', b'NONE']