Python 不将串行数据解析为数组
Python doesn't parse Serial data to an array
我正在做一个项目,我必须从一个 teensy 2.0(我正在用 arduino 编程)收集电压并将这些电压发送到 Python。我还必须发送接收数据的微秒。我正在使用 PySerial 与青少年交流。我首先将所有数据读入一个长度为 3998 的数组。我还有另外两个数组,一个 timeData
数组,用于跟踪微秒,以及一个 radarData
数组,用于跟踪电压.每个数组携带一半数据,即1999个点。
SerialData 的示例部分:
b'1468095384\r\n'
b'0.01\r\n'
这将重复 1999 次。
Python 代码获取这些输入并将它们写入数组 "SerialData"。完成读取所有数据后,它将所有点分成两个数组,如下所示:
for i in range (0,3998):
if(i % 2 == 0):
radarData[samples] = float(str(SerialData[i], 'utf-8'))
samples = samples + 1
else:
timeData[samples1] = float(str(SerialData[i], 'utf-8'))
samples1 = samples1 + 1
Sample 和 Sample1 是计数器变量。
从打印出 float(str(SerialData[i], 'utf-8'))
,我知道将字符串解析为浮点数是可行的,但是每当我打印出 radarData[samples]
或 timeData[samples]
,我只看到 0。我是什么做错了吗?感谢任何帮助。
谢谢!
我怀疑您对列表的工作原理有一个错误的前提,这让您一头雾水。这有效:
SerialData = [ b'468095384\r\n', b'0.01\r\n'] * 10
radarData = []
timeData = []
for i in range(0,len(SerialData)):
if(i % 2 == 0):
radarData.append(float(str(SerialData[i], 'utf-8')))
else:
timeData.append(float(str(SerialData[i], 'utf-8')))
print(radarData)
print(timeData)
(顺便说一句,这就是我们要求 MCVE 时的意思)
我更改了您的代码以附加到空列表并删除了示例索引。
似乎要使您的代码正常工作SerialData
需要已经是一个包含len(SerialData)
(或更多)项目的分配列表。
如果您的脚本退出时确实是 运行 SerialData[samples]
,那么您正在查看列表中某种预初始化的项目。你看samples
有什么价值?
这是我的输出:
[468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0]
[0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01]
为了好玩:
serialData = [ b'468095384\r\n', b'0.01\r\n'] * 10
tmp = list(map(lambda d: float(d), serialData))
radarData = tmp[0::2]
timedata = tmp[1::2]
print(radarData)
print(timeData)
我正在做一个项目,我必须从一个 teensy 2.0(我正在用 arduino 编程)收集电压并将这些电压发送到 Python。我还必须发送接收数据的微秒。我正在使用 PySerial 与青少年交流。我首先将所有数据读入一个长度为 3998 的数组。我还有另外两个数组,一个 timeData
数组,用于跟踪微秒,以及一个 radarData
数组,用于跟踪电压.每个数组携带一半数据,即1999个点。
SerialData 的示例部分:
b'1468095384\r\n'
b'0.01\r\n'
这将重复 1999 次。 Python 代码获取这些输入并将它们写入数组 "SerialData"。完成读取所有数据后,它将所有点分成两个数组,如下所示:
for i in range (0,3998):
if(i % 2 == 0):
radarData[samples] = float(str(SerialData[i], 'utf-8'))
samples = samples + 1
else:
timeData[samples1] = float(str(SerialData[i], 'utf-8'))
samples1 = samples1 + 1
Sample 和 Sample1 是计数器变量。
从打印出 float(str(SerialData[i], 'utf-8'))
,我知道将字符串解析为浮点数是可行的,但是每当我打印出 radarData[samples]
或 timeData[samples]
,我只看到 0。我是什么做错了吗?感谢任何帮助。
谢谢!
我怀疑您对列表的工作原理有一个错误的前提,这让您一头雾水。这有效:
SerialData = [ b'468095384\r\n', b'0.01\r\n'] * 10
radarData = []
timeData = []
for i in range(0,len(SerialData)):
if(i % 2 == 0):
radarData.append(float(str(SerialData[i], 'utf-8')))
else:
timeData.append(float(str(SerialData[i], 'utf-8')))
print(radarData)
print(timeData)
(顺便说一句,这就是我们要求 MCVE 时的意思)
我更改了您的代码以附加到空列表并删除了示例索引。
似乎要使您的代码正常工作SerialData
需要已经是一个包含len(SerialData)
(或更多)项目的分配列表。
如果您的脚本退出时确实是 运行 SerialData[samples]
,那么您正在查看列表中某种预初始化的项目。你看samples
有什么价值?
这是我的输出:
[468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0, 468095384.0]
[0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01]
为了好玩:
serialData = [ b'468095384\r\n', b'0.01\r\n'] * 10
tmp = list(map(lambda d: float(d), serialData))
radarData = tmp[0::2]
timedata = tmp[1::2]
print(radarData)
print(timeData)