如何用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 A | Column B |
|---|---|
| Data 1 | |
| Data 2 | |
| Data 3 | |
| Data 4 |
内容的提问来源于stack exchange,提问作者Destoboy2
相关产品推荐
相关产品推荐

