0

我正在编写一个 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,欧姆,正常, 无错误

编辑:数据实际上在终端上显示如下: b'0\r8.597E3,OHM,NORMAL,NONE\r'

我只是希望能够在开始时使用数值,这样我就可以随着时间的推移进行一些计算。我还需要能够在我的号码中使用科学概念部分,因为我不会事先知道我的测量范围。我知道必须有一种简单的方法来做到这一点,并且非常感谢任何帮助。

附带说明一下,我还希望能够绘制这些值或将它们放入某种 .csv 文件中。如果您对在哪里学习如何做到这一点有任何意见,那也很好,但我最关心的是字节数组的处理。

4

2 回答 2

2

用于split()将字符串分成逗号分隔的部分。然后第一部分是字符串“8.597E3”,您可以使用该float()函数对其进行转换。

s = '8.597E3,OHM,NORMAL,NONE'.split(',')
value = float(s[0])
于 2012-08-10T18:20:44.200 回答
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']
于 2012-08-14T01:39:35.347 回答