You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MQTT多主题订阅CSV写入异常:如何匹配主题与对应Payload?

解决MQTT消息与主题匹配写入CSV的问题

你的代码问题在于每次收到任意主题的消息时,都硬编码写入了三个主题和同一个Payload,完全没有关联实际收到的消息所属主题。要实现每个主题对应自身Payload写入,只需要利用MQTT回调里msg对象自带的主题信息即可,修正后的代码如下:

def on_message(client, userdata, msg):
    # 提取当前消息主题的最后一段
    topic_name = msg.topic.rsplit('/', 1)[-1]
    # 解码消息内容
    payload = msg.payload.decode("utf-8")
    # 打开文件并写入当前主题与对应Payload
    with open(r'file.csv', 'a+', newline='') as f:
        # 用逗号分隔符合CSV标准格式,若需要空格可替换为' '
        f.write(f"{topic_name},{payload}\n")

核心修正点:

  • 不再依赖硬编码的topic/topic2/topic3变量,直接通过msg.topic获取当前消息的真实主题
  • 仅写入当前消息对应的主题与Payload,避免无关内容重复写入
  • 合并文件操作,只打开一次文件,减少不必要的IO开销
  • 改用逗号作为分隔符,符合CSV文件的规范(如果你的业务场景确实需要空格分隔,将逗号替换为空格即可)

内容的提问来源于stack exchange,提问作者rspari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:20:30