下面的代码用于将原始数据从指定的串口输出到python,以及修改后的数据(现在是CSV格式),可以通过csv.writer输出到.csv文件中。但是,最终的输出显示为Fri 23 21:30:05 2021 "19,62,0,0,25“。您可能会看到这是不正确的,因为输出应该是time.asctime(time.localtime(time.time(),将decoded_bytes转换为星期五(4月23日21:30: 2021,19,62,0,0,25 )。我不知道”“是如何添加的,也不知道为什么python认为日期的'19‘部分--time对象并将它放在同一列中。任何帮助都将不胜感激。
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 RH,湿度: 62.00%RH,CO2: 0 0ppm,TVOC: 0 0ppb,温度:25.00
.csv数据:22 62.00 0 0 25.00
输入数据:土壤湿度:18 RH,湿度: 62.00%RH,CO2: 400 0ppb,TVOC: 0 0ppb,温度:24.45
.csv数据: 18,62.00,400,0,24.45
输入数据:土壤湿度:15 RH,湿度: 62.00%RH,CO2: 400 0ppb,TVOC: 0 0ppb,温度:25.00
.csv数据: 15,62.00,400,0,25.00
发布于 2021-04-23 12:48:36
试着适应这个解决方案,看看它是否有帮助。
file_input.txt
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脚本
import time
import re
def write_to_csv(list_input):
import csv
with open('file_output.csv', 'a', newline='') as myfile:
wr = csv.writer(myfile, quoting=csv.QUOTE_NONNUMERIC)
wr.writerow(list_input)
def read_input(file_input):
with open(file_input, 'r') as file_in:
list_file = file_in.read().splitlines()
for i in list_file:
# Find the pattern
res=re.findall(': ?(\d*\.?\d*)', i)
# Convert the list to number
res=list(map(float,res))
time_stamp = time.asctime(time.localtime(time.time()))
res.insert(0,time_stamp)
write_to_csv(res)
file_input = 'file_input.txt'
read_input(file_input)file_output.csv
"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.0https://stackoverflow.com/questions/67229352
复制相似问题