2016-12-28 10 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行でのみ行われます。助けてもらえますか?まだPythonのかなりのnoobie。

答えて

1

NumPyはこの種のものに最適なソリューションではありません。 これは、あなたが意図し何をすべき:

ここ fobj = open('foo.csv', 'a')
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() 

は追加モードでファイルを開きます。したがって、ファイルがすでに存在する場合、次の書き込みはファイルの最後に移動し、ファイル内のデータは保持されます。 コードを見てみましょう。この行は、

ファイル全体を読み込みますが、変数に代入していないため、読み込み時に何もしません。あなたはこのような何かをする必要があります:

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

この行を:

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

は、既存のものを上書きする名前foo.csvで新しいファイルを作成します。したがって、最後に書き込まれた行は1行しか表示されません。

これは同じですが、DOSが開いていない操作を行うと、ファイルのすべての時間を閉じる必要があります。

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

関連する問題