Python将列中的数据保存到变量中

python初学者在这里。我正在使用 Rapsberry Pi 和 Arduino 使用距离传感器。

传感器数据的输出是连续的,直到程序停止。这是输出的一个片段:


4 5 5 0 0 448

4 5 5 0 0 0

4 5 5 0 0 0

4 5 5 0 0 0

4 5 5 0 0 0

4 5 5 0 0 0

4 5 5 0 0 448

我的问题是将每列数据保存到自己的变量中的最佳方法是什么?每列都是由空格分隔的自己的传感器,我需要对每个传感器执行操作。我曾尝试使用,.split()但无法使其正常运行。


这是将从 Arduino 获取串行数据的 Python 代码。如果我不使用.decode(),.strip()然后输出将在每个换行符的开头和每个换行符/r/n的末尾都有 ab' 。


import datetime

import serial

datetime.datetime.now()

ser=serial.Serial('/dev/ttyACM0',115200)


while True:

    read_serial=ser.readline()

    val= read_serial.decode()

    print (val.strip())

这是Arduino代码:


#include <NewPing.h>

#define SONAR_NUM 6    // Number of sensors.

#define MAX_DISTANCE 500 // Maximum distance (in cm) to ping.



NewPing sonar[SONAR_NUM] = {   // Sensor object array.

  NewPing(12, 13, MAX_DISTANCE), // Each sensor's trigger pin, echo pin, and max distance to ping. 

  NewPing(10, 11, MAX_DISTANCE), 

  NewPing(8, 9, MAX_DISTANCE),

  NewPing(6, 7, MAX_DISTANCE),

  NewPing(4, 5, MAX_DISTANCE),

  NewPing(2, 3, MAX_DISTANCE)

};


void setup() {

  Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.

}


void loop() { 

  for (uint8_t i = 0; i < SONAR_NUM; i++) { // Loop through each sensor and display results.

    delay(15); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings    

    Serial.print(" "); 

    Serial.print(sonar[i].ping_in());

  }

  Serial.println();

}


蝴蝶不菲
浏览 299回答 1
1回答

万千封印

如果我不使用 .decode() 和 .strip() ,那么输出将在每个换行符的开头有 ab' ,在每个换行符的末尾有一个 /r/n 。read_serial=ser.readline()这一行正在返回字节。在 Python 3 中,decode 函数默认将字节字符串解码为 UTF-8。看起来您正在处理整数,因此不需要解码。val.strip()这会从两端删除换行符和其他空白字符。简单地使用 rstrip 可能更好,因为这是换行符所在的位置。一旦您阅读了该行并删除了换行符,您就可以使用 split 为您的值创建一个数组。例子:val&nbsp;=&nbsp;b'4&nbsp;5&nbsp;5&nbsp;0&nbsp;0&nbsp;448' row&nbsp;=&nbsp;[int(x)&nbsp;for&nbsp;x&nbsp;in&nbsp;val.split()]row 变量现在包含 6 个值,您可以使用 row[i] 访问这些值,其中 i 是值的位置(从 0 开始)。希望这是有道理的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python