为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蝴蝶不菲 2021-09-28 15:25:11
python初学者在这里。我正在使用 Rapsberry Pi 和 Arduino 使用距离传感器。传感器数据的输出是连续的,直到程序停止。这是输出的一个片段:4 5 5 0 0 4484 5 5 0 0 04 5 5 0 0 04 5 5 0 0 04 5 5 0 0 04 5 5 0 0 04 5 5 0 0 448我的问题是将每列数据保存到自己的变量中的最佳方法是什么?每列都是由空格分隔的自己的传感器,我需要对每个传感器执行操作。我曾尝试使用,.split()但无法使其正常运行。这是将从 Arduino 获取串行数据的 Python 代码。如果我不使用.decode(),.strip()然后输出将在每个换行符的开头和每个换行符/r/n的末尾都有 ab' 。import datetimeimport serialdatetime.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();}
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

如果我不使用 .decode() 和 .strip() ,那么输出将在每个换行符的开头有 ab' ,在每个换行符的末尾有一个 /r/n 。

read_serial=ser.readline()

这一行正在返回字节。在 Python 3 中,decode 函数默认将字节字符串解码为 UTF-8。看起来您正在处理整数,因此不需要解码。

val.strip()

这会从两端删除换行符和其他空白字符。简单地使用 rstrip 可能更好,因为这是换行符所在的位置。

一旦您阅读了该行并删除了换行符,您就可以使用 split 为您的值创建一个数组。例子:

val = b'4 5 5 0 0 448'
row = [int(x) for x in val.split()]

row 变量现在包含 6 个值,您可以使用 row[i] 访问这些值,其中 i 是值的位置(从 0 开始)。

希望这是有道理的。


查看完整回答
反对 回复 2021-09-28
  • 1 回答
  • 0 关注
  • 296 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信