2011-01-08 14 views
2

私は加速度計MMA7361Lから受け取ったデータを格納するために次のPythonコードを使用しています。ファイルは作成されますが、データは書き込まれません。Pythonを使用してテキストファイルにシリアルデータを格納

データの損失を防ぐために、データをファイルに保存する必要があります。データは私の加速度計を接続するマイコンとしてのArduinoによって送信されます。

import serial 

port = serial.Serial('COM4', 9600) 

for i in range(0, 10): 
    abc=open('abc.txt', 'r+b') //append and binary(a+b) mode 
    x = port.read(size=1)// 1 byte 
    print x 
    abc.write(x) 
    abc.close() 

port.close() 
+1

あなたが表示されているコードコメントが示すように 'a + b'モードではなく' r + b'モードでファイルをオープンしています。また、バイナリファイルに 'txt'拡張子を与えることは、少なくとも混乱させます。 – aaronasterling

+0

申し訳ありません。何かをしようとしていて、B4を変更するのを忘れてしまった...アップロードしました。どうもありがとうございます! – change

答えて

1

ファイルモードを 'ab'に変更すると正常に動作します。 a + bは、データを追加している間にその内容を読みたい場合にのみ便利です。

ここで深刻な最適化が必要な場合を除き、最初はファイル全体を読み取った後、データを「ab」モードで再度開くだけです。

3
import serial 

addr = 'COM4' 
baud = 9600 
fname = 'accel.dat' 
fmode = 'ab' 
reps = 10 

with serial.Serial(addr,baud) as port, open(fname,fmode) as outf: 
    for i in range(reps): 
     x = port.read(size=1) 
     print x 
     outf.write(x) 
     outf.flush() 
0

このようにすれば、私は今のところこのようにしています。私はまた、COMポートがどのように使用されているのか、whileループを実行するcomポートが存在するかどうか、そしてそうでない場合は、ファイルを閉じるように指示する別の情報があります。

輸入シリアル インポートCSV

ファイル= raw_input( 'としてファイルを保存: ') SAVEFILE =オープン(ファイル、 'W')

SERIALPORT = raw_input(' ポートを入力します。') PORT1 = SERIALPORT

"への接続..." 印刷、PORT1

アルドゥイーノ= serial.Serial(PORT1、9600)

プリントトゥルーながら

を "Arduinoの検出": time.sleep(0.01) データ= arduino.readline() saveFile.write(データ) 印刷データ

関連する問題