Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将逗号分隔的对象导出到.csv文件中_Python_Csv_Time_Arduino_Pyserial - Fatal编程技术网

Python 如何将逗号分隔的对象导出到.csv文件中

Python 如何将逗号分隔的对象导出到.csv文件中,python,csv,time,arduino,pyserial,Python,Csv,Time,Arduino,Pyserial,下面的代码用于将原始数据从指定的串行端口输出到python shell,以及现在以CSV格式修改的数据,以便通过CSV.writer输出到.CSV文件中。但是,最终输出显示为Fri Apr 23 21:30:05 2021“19,62,0,0,25。正如您可能观察到的,这是不正确的,因为输出应该是[time.asctime(time.localtime(time.time())),解码的字节]转换为Fri Apr 23 21:30:05 2021,19,62,0,0,25。我不确定也不是pyth

下面的代码用于将原始数据从指定的串行端口输出到python shell,以及现在以CSV格式修改的数据,以便通过CSV.writer输出到.CSV文件中。但是,最终输出显示为Fri Apr 23 21:30:05 2021“19,62,0,0,25。正如您可能观察到的,这是不正确的,因为输出应该是[time.asctime(time.localtime(time.time())),解码的字节]转换为Fri Apr 23 21:30:05 2021,19,62,0,0,25。我不确定也不是python考虑日期时间对象的“19”部分并将其放在同一列中的原因。任何帮助都将不胜感激

import serial
import time
import csv

#ser = serial.Serial('/dev/ttyUSB0', baudrate = 9600, timeout = 1)
ser = serial.Serial('COM4', baudrate = 9600)
ser.flushInput()

while True:
    
    ser_bytes = ser.readline()
    line = ser.readline().decode('utf-8')[:-1]
    decoded_bytes = line.replace(":","",5).replace("Soil Moisture","",1).replace("Humidity","",1).replace("CO2","",1).replace("ppm","",1).replace("ppb","",1).replace("%RH","",1).replace("Temp","",1).replace("EC","",1).replace("TVOC","",1).replace(" ","",8)

    if line:  # If it isn't a blank line
        print("Incoming DATA:")
        print(line)
        print(".csv DATA:")
        print(decoded_bytes)
        with open("test_data.csv","a") as f:
            writer = csv.writer(f,delimiter=" ")
            writer.writerow([time.asctime(time.localtime(time.time())),decoded_bytes])

python shell输出示例:

传入数据: 土壤湿度:22摄氏度,湿度:相对湿度62.00%,二氧化碳:0ppm,TVOC:0ppb,温度:25.00

.csv数据: 22,62.00,0,0,25.00

传入数据: 土壤湿度:18EC,湿度:相对湿度62.00%,二氧化碳:400ppm,TVOC:0ppb,温度:24.45

.csv数据: 18,62.00400,0,24.45

传入数据: 土壤湿度:15EC,湿度:相对湿度62.00%,二氧化碳:400ppm,TVOC:0ppb,温度:25.00

.csv数据:
15,62.00400,0,25.00

尝试调整此解决方案,看看是否有帮助

文件_input.txt

剧本

导入时间
进口稀土
def写入到csv(列表输入):
导入csv
打开('file_output.csv','a',换行符='')作为myfile:
wr=csv.writer(myfile,quoting=csv.QUOTE\u非数字)
wr.writerow(列表输入)
def读取输入(文件输入):
打开(文件输入,'r')作为文件输入:
list_file=file_in.read().splitlines()中的文件
对于列表_文件中的i:
#找到模式
res=re.findall(':?(\d*\.?\d*)',i)
#将列表转换为数字
res=列表(映射(浮动,res))
time\u stamp=time.asctime(time.localtime(time.time()))
res.insert(0,时间戳)
写入到csv(res)
file_input='file_input.txt'
读取输入(文件输入)
文件_output.csv


我能够调整您的解决方案以获得以下输出:Fri Apr 23 23:13:32 2021,[7.0,62.0,0.0,0.0,25.72]。现在您可以看到,所有的值都在第二列,时间在第一列。感谢您的解决方案,但是您的答案不包括时间戳,因此数据无法以任何时间为参考绘制。该修复非常有效,我现在唯一的问题是它一次吐出10行左右,如果我能让它每2秒只打印一行,而不是每2秒打印10行,我会将此标记为答案!
Soil Moisture: 22EC, Humidity: 62.00%RH, CO2: 0ppm, TVOC: 0ppb, Temp:25.00
Soil Moisture: 18EC, Humidity: 62.00%RH, CO2: 400ppm, TVOC: 0ppb, Temp:24.45
Soil Moisture: 15EC, Humidity: 62.00%RH, CO2: 400ppm, TVOC: 0ppb, Temp:25.00
"Fri Apr 23 10:29:11 2021",22.0,62.0,0.0,0.0,25.0
"Fri Apr 23 10:29:11 2021",18.0,62.0,400.0,0.0,24.45
"Fri Apr 23 10:29:11 2021",15.0,62.0,400.0,0.0,25.0