使用实时读取向 numpy 添加新行

add new row to numpy using realtime reading

我正在使用 microstacknode 加速度计并打算将其保存到 csv 文件中。

while True:
    numpy.loadtxt('foo.csv', delimiter=",")
    raw = accelerometer.get_xyz(raw=True)
    g = accelerometer.get_xyz()
    ms = accelerometer.get_xyz_ms2()
    a = numpy.asarray([[raw['x'],raw['y'],raw['z']]])
    numpy.savetxt("foo.csv",a,delimiter=",",newline="\n")

但是,保存仅在 1 行上完成。有什么帮助吗? python.

还是个菜鸟

NumPy 不是解决此类问题的最佳解决方案。 这应该符合您的意图:

while True:
    raw = accelerometer.get_xyz(raw=True)
    fobj = open('foo.csv', 'a')
    fobj.write('{},{},{}\n'.format(raw['x'], raw['y'], raw['z']))
    fobj.close() 

这里 fobj = open('foo.csv', 'a') 以追加模式打开文件。因此,如果文件已经存在,则下一次写入将转到文件末尾,将数据保留在文件中。 让我们看看你的代码。这一行:

numpy.loadtxt('foo.csv', delimiter=",")

读取整个文件但不对读取的内容执行任何操作,因为您没有分配给变量。你需要做这样的事情:

data = numpy.loadtxt('foo.csv', delimiter=",")

这一行:

numpy.savetxt("foo.csv",a,delimiter=",",newline="\n")

创建一个名为 foo.csv 的新文件覆盖现有文件。因此,您只看到一行,最后一行。

这应该做同样的事情,但不会一直打开和关闭文件:

with open('foo.csv', 'a') as fobj:
    while True:
        raw = accelerometer.get_xyz(raw=True)
        fobj.write('{},{},{}\n'.format(raw['x'], raw['y'], raw['z']))

with open() 打开文件并承诺即使出现异常也会关闭它。例如,如果您使用 Ctrl-C.

跳出 while True 循环