如何用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
相关产品推荐
相关产品推荐

