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

Python处理传感器CSV数据:移除方括号引号并新增Datetime列

水质传感器CSV写入格式问题及修复方案

问题说明

我编写了Python代码读取多台水质传感器数据并写入CSV,但生成的CSV存在两个问题:

  1. 传感器数据被方括号、双引号包裹,无法直接用作结构化数据
  2. 缺少完整的日期时间列(只有时分秒,没有年月日)

尝试用Pandas的replace方法移除特殊符号,但没解决问题,求技术帮助。


相关代码与CSV示例

传感器数据读取与写入代码

import csv
import os
import time
from gdx import gdx 
gdx = gdx.gdx()
gdx.open(connection='usb')   
gdx.select_sensors() 
os.chdir(r"C:\\Users\\")
with open('sensor_data.csv', 'a', newline='') as my_data_file:   
    csv_writer = csv.writer(my_data_file)
    while True:
        gdx.start(period=100) 
        column_headers = gdx.enabled_sensor_info()
        csv_writer.writerow(column_headers)

        for i in range(0,100000):
            measurements = gdx.read()
            localtime = time.localtime()
            result = time.strftime("%I:%M:%S %p", localtime)
            print(result)
            combined_rows = [result, measurements]
            csv_writer.writerow(combined_rows)
            print(measurements)
            my_data_file.flush()
            time.sleep(59.9)

生成的错误格式CSV

DO Concentration (mg/L),DO Saturation (%),Temperature (℃),Pressure (kPa),DO Salinity (mg/L)
11:08:28 PM,"[0.0, 50000.0, 26.399999618530273, 100.69999694824219, 50.0]"
11:09:28 PM,"[0.0, 50000.0, 26.399999618530273, 100.69999694824219, 50.0]"
11:10:28 PM,"[0.0, 50000.0, 26.399999618530273, 100.69999694824219, 50.0]"

失败的修复尝试代码

df = pandas.read_csv("sensor_data.csv", encoding="ISO-8859-1")
df = df.replace('\\"','', regex=True)
df = df.replace('\[','', regex=True)
df = df.replace('\]','', regex=True)
df

修复方案

方案1:从写入阶段彻底解决(推荐)

问题根源在于:

  • 每次循环都重复写入表头,导致CSV结构混乱
  • 直接把measurements列表作为单个元素写入,被CSV转成带括号的字符串
  • 时间格式只包含时分秒,缺少日期

修改后的写入代码:

import csv
import os
import time
from gdx import gdx 

gdx = gdx.gdx()
gdx.open(connection='usb')   
gdx.select_sensors() 
os.chdir(r"C:\\Users\\")

csv_path = 'sensor_data.csv'
# 检查文件是否已存在,避免重复写表头
file_exists = os.path.isfile(csv_path)

with open(csv_path, 'a', newline='') as data_file:   
    csv_writer = csv.writer(data_file)
    # 仅在文件新建时写入一次表头,新增Datetime列
    if not file_exists:
        headers = ['Datetime'] + gdx.enabled_sensor_info()
        csv_writer.writerow(headers)
    
    gdx.start(period=100) 
    for _ in range(0, 100000):
        measurements = gdx.read()
        # 生成包含年月日的完整日期时间
        datetime_str = time.strftime("%Y-%m-%d %I:%M:%S %p", time.localtime())
        # 把时间和传感器数据展开成一行(直接拆分列表元素)
        row_data = [datetime_str] + measurements
        csv_writer.writerow(row_data)
        print(datetime_str, measurements)
        data_file.flush()
        time.sleep(59.9)

方案2:修复已生成的错误CSV

如果已经有了格式错误的CSV文件,用Pandas解析修复:

import pandas as pd
from datetime import datetime

# 读取CSV,重新指定列名(原表头实际是传感器名称,但数据行结构不一致)
df = pd.read_csv("sensor_data.csv", encoding="ISO-8859-1", 
                 names=['Datetime', 'Sensor_Data'], header=0)

# 清理传感器数据字符串,转成列表
df['Sensor_Data'] = df['Sensor_Data'].str.replace(r'[\[\]" ]', '', regex=True).str.split(',')

# 拆分列表为单独的传感器列,对应原表头
sensor_columns = ['DO Concentration (mg/L)', 'DO Saturation (%)', 
                  'Temperature (℃)', 'Pressure (kPa)', 'DO Salinity (mg/L)']
df[sensor_columns] = pd.DataFrame(df['Sensor_Data'].tolist(), index=df.index)

# 补全日期(假设数据是今天采集的,可根据实际修改日期)
today_date = datetime.today().strftime("%Y-%m-%d")
df['Datetime'] = f"{today_date} " + df['Datetime']

# 删除临时数据列,保存修复后的CSV
df.drop('Sensor_Data', axis=1, inplace=True)
df.to_csv("fixed_sensor_data.csv", index=False)
print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:45:27