2016-11-13 28 views
-2

シリアルポートからデータが来る場所でデータを1行と1列に書き込む必要があります。だから私は読んで行ごとに書いていました。 しかし、私はPYTHONの単列の次の列にデータを書き込む必要があります。 Iは、すべてのデータが単一の行及び複数の列にあるように、このような方法でこのcsvファイルに1行にデータを書き込む

1,2,33,43343,4555,344323 

ように末尾にファイルを持っている必要はなく、一つの列と複数の行です。

これにより、1行後にデータが書き込まれます。

が、私は 1、12、2222、3234、1233、131 をしたいですそれぞれの罪のようにgle行と複数列。

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

Read: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

一つは、問題の短い、実行可能な例を供給するためにここに書いて質問します。そうすれば、誰もが同じことを実行し、誰もができるコードと出力に関して、何が間違っているのかを話すことができます。

ここでは模擬データで更新されたプログラムです。プログラムを実行するときにファイルがすでに存在する場合、ファイルが削除されるように、オープンを "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

この2行目の書き込みは1行目の空白になります –

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

はい、すでにエラーが表示されているので、エラーが表示されます –

関連する問題