2016-09-14 5 views
1

Pythonでファイル出力に関する質問があります。 私は3つのセンサーから値を読み取るソフトウェアを設計していました。 各センサーは1秒間に100個の値を読み取り、各プロセスの間にファイルで印刷する必要があります。ファイルに非常に多くの値を書き込む方が良い方法Python(デバイスのメモリ不足)

time_memory = [k + i/100 for i in range(100)] # dividing 1 second into 100 intervals 
x = [100 elements] 
y = [100 elements] 
z = [100 elements] 

以下は、ファイルに書き込むコードです。

for i in range(self.samples): 
    self.time_memory[i] = file_time + self.time_index[i] 
    f.write("{0} {1} {2} {3}\n".format(self.time_memory[i], x[i], y[i], z[i])) 

ので、ファイル内の結果は、測定時間が8000秒を超える場合、ソフトウェアが停止し、しかし

time_value, x, y, z 
time_value, x, y, z 
... 

のようになります。 私はそれが私が使用しているデバイスは古いもののようなので、デバイスが進めなければならない非常に多くのデータによると思う。 (コンピュータがNI DAQデバイスに接続されているため、デバイスを変更できません)

上記のコードを変更するための多くの代替方法が見つかりましたが、見つかりませんでした。この問題で私を助けることができる人はいますか?

+1

、私はそれがメモリの状況(ヘルプをデバッグするために要求する際、完全なトレースバックを含めてください)のうち、可能性の原因となるファイルの扱いではありません賭ける思い、あなたが書き込む前に測定値をどのように保存しているか。 –

+0

私が正しく理解していれば、毎秒書くのではなく、数秒(10-30秒)のバッチを書くことができますか? –

+0

_測定時間が8000秒を超えると、ソフトウェアは2つの質問を停止します:(a)あなたのpythonスクリプトはどのように 'self.samples'を埋めますか? (b)ソフトウェアが停止するとどうなりますか?あなたは例外、沈黙のハング、何か他のものを見ますか?この情報で質問を更新してください。 –

答えて

-1

バイナリモードでデータを書き込むことをお勧めします。これはテキストモードより速くなければなりません(スペースも少なくて済みます)。したがって、あなたは、このようにバイナリモードでファイルを開くことがあります。

f = open('filename.data', 'wb') 
+0

pythonのバージョンによって、フォーマットされた文字列はすでにバイナリであるかもしれません。 –

+0

ボトルネックがCPUかメモリかどうかわからないので、バイナリモードを明示的に使用するほうが速いかもしれません。また、文字列の.format()メソッドを避け、4つの連続したf.write()呼び出しで4つの値を1つずつ書き込むこともできます。 – Maxim

関連する問題