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

如何用Python将串口数据写入CSV文件的第二/第三列?

串口数据写入CSV指定列的解决方案

场景1:实现每两个串口数据合并为一行(A列、B列各一个)

现有代码每次读取一条串口数据就写入一行,导致所有数据都集中在第一列。要实现你期望的格式,需要先缓存读取到的数据,每攒够2条就组成一行写入CSV:

修改后的代码:

import csv
import serial  # 假设你已完成serialInst的初始化配置

# 用with语句自动管理文件,避免资源泄漏
with open('test.csv', 'w', encoding="utf-8", newline="") as file:
    writer = csv.writer(file)
    # 可选:写入表头,与期望输出格式匹配
    writer.writerow(["Column A", "Column B"])
    data_buffer = []
    
    while True:
        if serialInst.in_waiting:
            packet = serialInst.readline()
            data = packet.decode().rstrip()  # 解码并去除换行符
            data_buffer.append(data)
            
            # 攒够2条数据就写入一行
            if len(data_buffer) == 2:
                writer.writerow(data_buffer)
                data_buffer = []  # 清空缓存,准备下一组数据

代码说明:

  • 新增data_buffer列表缓存串口数据,每收集2条就调用writerow写入一行,对应CSV的A、B两列
  • 使用with open替代直接open,确保文件操作完成后自动关闭
  • 修复原代码中encoding="utf"的错误,改为标准的utf-8编码格式

场景2:将所有数据写入第二列(第一列留空)

如果只是需要把串口数据全部放到第二列,第一列保持空白,只需修改写入行的格式:

import csv
import serial

with open('test.csv', 'w', encoding="utf-8", newline="") as file:
    writer = csv.writer(file)
    writer.writerow(["Column A", "Column B"])
    
    while True:
        if serialInst.in_waiting:
            packet = serialInst.readline()
            data = packet.decode().rstrip()
            # 写入时第一列留空,第二列放置串口数据
            writer.writerow(["", data])

对应输出效果:

Column AColumn B
Data 1
Data 2
Data 3
Data 4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:31:10