2016-11-13 2 views
-2

Мне нужно записать данные в одну строку и столбец, где данные поступают из последовательного порта. Поэтому я часто читал и записывал строки за строкой. Но требование - мне нужно записать данные в следующий столбец одной строки в PYTHON. мне нужно иметь файл в конце, как этотЗапись данных в файл csv в одну строку

1,2,33,43343,4555,344323 

Таким образом все данные, чтобы быть в одиночных строк и несколько столбцов, а не в одну колонку и несколько строк.

Таким образом, данные записываются в одну по одной строке.

, но я хочу 1, 12, 2222, 3234, 1233, 131 как каждый грех gle row и несколько столбцов.

import serial 
import time 
import csv 
ser = serial.Serial('COM29', 57600) 

timeout = time.time() + 60/6 # 5 minutes from now 

while True: 
    test = 0 
    if test == 5 or time.time() > timeout: 
     break 
    ss=ser.readline() 
    print ss 
    s=ss.replace("\n","") 
    with open('C:\Users\Ivory Power\Desktop\EEG_Data\Othr_eeg\egg31.csv', 'ab') as csvfile: 
     spamwriter = csv.writer(csvfile,delimiter=',', lineterminator='\n') 
     spamwriter.writerow([ s ]) 
     csvfile.close() 
    time.sleep(0.02) 
+1

Ваши требования не ясны. Не могли бы вы подробно рассказать свое сообщение примерами и более ясным объяснением. –

+0

Читайте: http://stackoverflow.com/help/how-to-ask – JChris

+0

Не могли бы вы разместить входные данные, с которыми работаете? –

ответ

0

csv модуль записывает строки - каждый раз при вызове writerow новая строка написана и начинается новая строка. Таким образом, вы не можете вызывать его несколько раз и ожидать получения столбцов. Однако вы можете собрать данные в список, а затем записать этот список, когда закончите. Модуль csv является излишним для этого.

import serial 
import time 
import csv 
ser = serial.Serial('COM29', 57600) 

timeout = time.time() + 60/6 # 5 minutes from now 

data = [] 
for _ in range(5): 
    data.append(ser.readline().strip()) 
    time.sleep(0.02) 

with open('C:\Users\Ivory Power\Desktop\EEG_Data\Othr_eeg\egg31.csv', 'ab') as csvfile: 
    spamwriter = csv.writer(csvfile,delimiter=',', lineterminator='\n') 
    spamwriter.writerow(data) 

    # csv is overkill here unless the data itself contains commas 
    # that need to be escaped. You could do this instead. 
    # csvfile.write(','.join(data) + '\n') 

UPDATE

Один из трюков на вопрос пишет здесь, чтобы предоставить краткий, работоспособный пример задачи. Таким образом, все работают одинаково, и вы можете говорить о том, что не так с точки зрения кода и выхода, с которым каждый может играть.

Здесь представлена ​​программа, обновленная с помощью mock data. Я изменил open на «wb», чтобы файл был удален, если он уже существует, когда программа запускается. Запустите его и дайте мне знать, как его результаты отличаются от того, что вы хотите.

import csv 
import time 

filename = 'deleteme.csv' 

test_row = '1,2,33,43343,4555,344323' 
test_data = test_row.split(',') 

data = [] 
for _ in range(6): 
    data.append(test_data.pop(0).strip()) 
    time.sleep(0.02) 

with open(filename, 'wb') as csvfile: 
    spamwriter = csv.writer(csvfile,delimiter=',', lineterminator='\n') 
    spamwriter.writerow(data) 

print repr(open(filename).read()) 
assert open(filename).read().strip() == test_row, 'got one row' 
+0

Это работает, но это выходит из первой строки. Любые возможные ошибки ???????????? –

+0

@AzeemAhamed - я добавил примерный пример ... попробуйте и дайте мне знать, что не работает. – tdelaney

+0

Этот текст записывается во второй строке, и это оставляет пустую строку –

0

Предполагая, что данные вашего последовательного порта не будут перекрывать вашу основную кучу памяти, следующий код будет соответствовать вашим потребностям.

import serial 
import time 
import csv 
ser = serial.Serial('COM29', 57600) 

timeout = time.time() + 60/6 # 5 minutes from now 

result = [] 
while True: 
    test = 0 
    if test == 5 or time.time() > timeout: 
     break 
    ss=ser.readline() 
    print(ss) 
    s=ss.replace("\n","") 
    result.append(s) 
    time.sleep(0.02) 

with open('C:\Users\Ivory Power\Desktop\EEG_Data\Othr_eeg\egg31.csv', 'w') as csvfile: 
    spamwriter = csv.writer(csvfile,delimiter=',', lineterminator='\n') 
    spamwriter.writerow([result]) 
    csvfile.close() 
+0

Я получил эту ошибку "AttributeError: объект" int "не имеет атрибута 'append'" –

+0

@AzeemAhamed Добавил ли 'result = []' перед циклом, как в коде? –

+0

Да, уже добавлено, что при этом отображается ошибка –

Смежные вопросы