如何从连续的数据流中提取所需的信息。?

2024-04-19 09:12:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个项目,在这个项目中,一个连续的数据流通过Arduino从串口传输过来,在这个项目中,我必须提取我所需要的信息。 我已经包括“AA”在我所需的数据开始和“55”在结束。你知道吗

Arduino串行监视器输出-

AA055
AA155
AA255
AA355
AA455

Arduino代码-

int i=0;
void setup()
{  
 Serial.begin(9600);    // Open serial connection at a baud rate of 9600
}

void loop()
{ 
 Serial.print("AA");
 Serial.print(i);
 Serial.println("55");

 i++;
 delay(100);
 }

PYTHON代码

import serial
import time
import csv

baudrate = 9600
port = 'COM2'  # set the correct port before run it

serial = serial.Serial(port=port, baudrate=baudrate)
serial.flushInput()
with open("test_data.csv","a") as f:
    writer = csv.writer(f,delimiter=",")
    writer.writerow(["TIME STAMP", "DATA"])

while True:
    try:
        ser_bytes = serial.readline()
        decoded_bytes = float(ser_bytes[0:len(ser_bytes)-2].decode("utf-8"))
        print(decoded_bytes)
        aq = time.strftime('%a %H:%M:%S')
        print(aq)
        with open("test_data.csv","a") as f:
        writer = csv.writer(f,delimiter=",")
        writer.writerow([time.strftime('%a %H:%M:%S'),decoded_bytes])
    except:
        print("Keyboard Interrupt")
        break

我希望python代码通过检测开头的“AA”和结尾的“55”来提取我的信息。你知道吗


Tags: csv项目代码importbytestimeportserial
1条回答
网友
1楼 · 发布于 2024-04-19 09:12:40

假设您需要从串行输出(以“AA”开始,以“55”结束)中提取信息,您可以对python代码进行如下修改:

...
print(decoded_bytes)

#First check whether the length of the serial output is at least 4. 
if len(decoded_bytes) >= 4:
    if decoded_bytes[0:2] == "AA" and decoded_bytes[len(decoded_bytes)-2:len(decoded_bytes)] == "55":
        print(decoded_bytes) # The information from serial output, between "AA" and "55"

aq = time.strftime('%a %H:%M:%S')
...

假设串行输出如下:

AA155
AA255
AB155
AA235

这段代码将只打印以“AA”开头并以“55”结尾的输出。这是前两种情况。你知道吗

我们正在检查长度是否大于4,因为信息将包含在“AA”和“55”中。你知道吗

这里需要注意的是字符串切片操作符。你可以把它读出来。它基本上返回字符串的一部分,在一些索引中。你知道吗

相关问题 更多 >