2016-12-28 4 views
1

Я использую акселерометр microstacknode и намерен сохранить его в файл csv.добавить новую строку в numpy используя чтение в реальном времени

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 линии. Любая помощь? Еще совсем noobie на питоне.

ответ

1

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() открывает файл с обещанием закрыть его, даже в случае исключения. Например, если вы выходите из цикла while True с Ctrl-C.

+0

Спасибо, чувак. Оценил это! – CherChuan