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

如何用Python拆分CSV同列的日期时间与数据?适配Arduino-树莓派场景

解决CSV中日期与数据同列的问题

问题根源

当前代码写入CSV时,直接将日期字符串d与Arduino返回的data拼接(d+ data),两者之间缺少CSV列的核心分隔符——逗号,导致表格工具将它们识别为同一列。

修复方案

方案1:快速修改手动写入逻辑

只需在日期和数据之间添加逗号分隔符,修改写入行的代码:

file.write(d + "," + data + "\n") 

注意:此方法生效的前提是,Arduino输出的data本身已经是用逗号分隔的多值格式(比如450,25.6,60,...)。

方案2:用Python内置csv模块规范写入(推荐)

手动拼接字符串易因特殊字符(如逗号、引号)导致格式混乱,用csv模块能自动处理CSV格式规则,代码调整如下:

import time
from datetime import datetime
import csv
import serial

arduino_port = "/dev/ttyACM0" 
baud = 9600 
fileName = "Arduino1.csv" 
ser = serial.Serial(arduino_port, baud)
print("Connected to Arduino port:" + arduino_port)

# 检查文件是否为空,为空则写入表头
with open(fileName, "r", newline="") as f:
    is_empty = f.read() == ""

with open(fileName, "a", newline="") as file:
    writer = csv.writer(file)
    # 首次写入时添加表头
    if is_empty:
        writer.writerow(["Time", "CO2(ppm)", "Temp(C)", "Humi(%)", "Vis", "IR", "UV", "pH"])
    
    samples = float('inf') 
    line = 0 
    print('Press Ctrl-C to quit...')
    print('Time, CO2(ppm), Temp(C), Humi(%), Vis, IR, UV, pH')
    print('-' * 85)

    try:
        while line <= samples:
            d = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            getData = str(ser.readline())
            data = getData[1:][1:-5]
            # 将日期与分割后的Arduino数据组合成一行
            row_data = [d] + data.split(",")
            print(d, data)
            writer.writerow(row_data)
            line += 1
    except KeyboardInterrupt:
        print("\nStopped by user")

print("File closed successfully")

补充说明

  • 方案1适合快速修复,仅需修改一行代码,但对Arduino输出格式有依赖。
  • 方案2更稳定,能自动处理特殊字符、换行等CSV格式问题,同时新增了Ctrl-C中断捕获,方便安全停止程序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:57:25