我目前正在处理一个Python脚本,该脚本从Numato板上读取ADC数据,将接收到的字节切成薄片以检索数据,该数据将是0到1023之间的整数,并更改该值以提供电的值当前。该值与获取读数的时间一起插入到一个Numpy数组中。
此代码引发错误“ TypeError:字节索引必须是整数或切片,而不是元组”。
检索数据所涉及的脚本的片段如下:
def readdata(a, serPort):
global elapsed
serPort.write(str.encode("adc read 0 " +v "\r"))
response = serPort.read(25)
current = response[8,-8]*0.0322265625
b = numpy.array([elapsed, current])
任何帮助都将受到赞赏。谢谢。
更新:对response [8,-8]上的错字已进行了修改,现在变为:
response[8,:-8]
现在正在引发另一个错误,例如:
TypeError: can't concat into bytes
答案 0 :(得分:0)
问题出在response[8,-8]
上。您已使用元组(8,-8)作为索引,这不适用于字节数组。 (numpy对象确实支持该索引和其他类型的复杂索引。另一方面,字节数组仅接受整数或切片作为索引。)
要获取从设备接收的部分数据,请使用切片,例如:
response[4:8] # get 4 bytes at offsets 4,5,6,7
请注意,类型为bytes
的切片也为bytes
,您将无法在算术运算中使用它,例如将其乘以浮点数。您必须先将字节转换为Python整数值。使用struct
模块来执行此操作。 7.1. struct — Interpret bytes as packed binary data。以下是获取4字节的big-endian整数的方法(例如,从偏移量4开始):
value = struct.unpack(">I", response[4:8])