Python MQTT脚本输出含b''及空格,如何提取纯净温度值?
解决MQTT接收温度值时的bytes格式问题
这个问题其实很常见啦——你看到的b' 22.71'是Python里bytes类型的默认显示格式,因为paho-mqtt客户端返回的msg.payload本质是二进制数据,不是直接可用的字符串或数值。下面给你几种简单可靠的处理方法,轻松拿到纯净的温度值:
方法一:解码+去空格+转数值(推荐)
直接在on_message函数里对收到的payload做三步处理:
- 用
decode('utf-8')把二进制bytes转成UTF-8编码的字符串 - 用
strip()去除字符串前后的空格(包括换行、制表符这类空白字符) - 转成
float类型,方便后续导出或计算
修改后的完整脚本如下:
import paho.mqtt.client as mqtt def on_connect(client, userdata, rc, *extra_params): client.subscribe("ha/temperature") def on_message(client, userdata, msg): if msg.topic == 'ha/temperature': # 处理payload,拿到纯净温度值 temp_str = msg.payload.decode('utf-8').strip() temp_value = float(temp_str) print(temp_value) # 输出纯净的数值,比如22.71 client = mqtt.Client("test") client.on_connect = on_connect client.on_message = on_message client.username_pw_set(username="username",password="password") client.connect("192.168.0.100", 1883, 60) client.loop_forever()
方法二:简化写法(适合格式固定的场景)
如果你确定消息格式只会是b' 数字'这种固定样式,也可以用一行代码直接处理:
print(float(msg.payload.decode('utf-8').strip()))
为什么之前的尝试没成功?
你之前直接截取字符或去除符号没用,是因为你操作的对象是bytes类型,不是字符串。必须先把bytes转成字符串,才能对其中的字符(比如空格)进行处理哦。
内容的提问来源于stack exchange,提问作者dannisis
相关产品推荐
相关产品推荐

