Python如何获取列表的最后一个元素(不提供逗号)

2024-07-03 06:37:06 发布

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

我正在做一个关于传感器数据的项目。我首先将传感器数据写入csv文件以保存它。之后,我读取文件并接收传感器数据,如下所示:

[  0   1   1   0   0 516]
[  1   1   1   0   0 498]
[  2   1   1   0   0 499]
[  3   1   1   0   0 500]
[  4   1   1   0   0 487]
[  5   1   1   0   0 502]
...

元素之间没有逗号。 我需要这个列表的最后一个元素来传输这个单元(模拟数据)。 我测试了一些东西,例如创建一个数组并将其转换回列表等等

这就是我保存数据的方式(使用raspberry pi):

device.start(samplingRate, acqChannelsEDA)
    with open('/home/pi/pywork/EDAdata.csv', 'w') as edafile:
        # create csv writer
        writer = csv.writer(edafile)

        start = time.time()
        end = time.time()
        while (end - start) < running_time:
            # Read samples
            sampledata = device.read(nSamples)
           
            writer.writerow(sampledata)
            print(sampledata)
            # print(eda_tf)
            end = time.time()

    edafile.close()

打印输出(sampledata)为:

[[8 1 1 0 0 0]]
[[9 1 1 0 0 0]]
[[10  1  1  0  0  0]]
[[11  1  1  0  0  0]]
[[12  1  1  0  0  0]]
[[13  1  1  0  0  0]]
[[14  1  1  0  0  0]]
[[15  1  1  0  0  0]]

这是来自read(self, nSamples=100)的代码。获取sampledata的方法

 dataAcquired = numpy.zeros((nSamples, 5 + nChannels), dtype=int)
            for sample in range(nSamples):
                Data = self.receive(number_bytes)
                decodedData = list(struct.unpack(number_bytes * "B ", Data))
                crc = decodedData[-1] & 0x0F
                decodedData[-1] = decodedData[-1] & 0xF0
                x = 0
                for i in range(number_bytes):
                    for bit in range(7, -1, -1):
                        x = x << 1
                        if (x & 0x10):
                            x = x ^ 0x03
                        x = x ^ ((decodedData[i] >> bit) & 0x01)
                if (crc == x & 0x0F):
                    dataAcquired[sample, 0] = decodedData[-1] >> 4
                    dataAcquired[sample, 1] = decodedData[-2] >> 7 & 0x01
                    dataAcquired[sample, 2] = decodedData[-2] >> 6 & 0x01
                    dataAcquired[sample, 3] = decodedData[-2] >> 5 & 0x01
                    dataAcquired[sample, 4] = decodedData[-2] >> 4 & 0x01
                    if nChannels > 0:
                        dataAcquired[sample, 5] = ((decodedData[-2] & 0x0F) << 6) | (decodedData[-3] >> 2)
                    if nChannels > 1:
                        dataAcquired[sample, 6] = ((decodedData[-3] & 0x03) << 8) | decodedData[-4]
                    if nChannels > 2:
                        dataAcquired[sample, 7] = (decodedData[-5] << 2) | (decodedData[-6] >> 6)
                    if nChannels > 3:
                        dataAcquired[sample, 8] = ((decodedData[-6] & 0x3F) << 4) | (decodedData[-7] >> 4)
                    if nChannels > 4:
                        dataAcquired[sample, 9] = ((decodedData[-7] & 0x0F) << 2) | (decodedData[-8] >> 6)
                    if nChannels > 5:
                        dataAcquired[sample, 10] = decodedData[-8] & 0x3F
                else:
                    raise Exception(ExceptionCode.CONTACTING_DEVICE)
            
            return dataAcquired

Tags: csv数据sampleiftime传感器startwriter
1条回答
网友
1楼 · 发布于 2024-07-03 06:37:06

要获取列表的最后一个元素,应该使用负索引,例如

arr = [10, 20, 30, 40, 50]
print (arr[-1])
print (arr[-2])

输出:

50
40

相关问题 更多 >