2016-09-27 18 views
0
  1. 私はディスクに5GBのデータファイルを持っており、ファイルの最後に100MBのデータセットを追加したいと思います。私はファイル内の元のデータを変更したり移動したりしたくない。私は長いファイルの長いリストとしてホールファイルをメモリに読み込んで、私の小さな新しいデータを追加することができますが、それは遅すぎます。どのように私はこれをより効率的に行うことができますか? 穴のファイルをメモリに読み込まずに大きなファイルをPythonで修正して書き込む

  2. 私は、長いロングリストとして大きなデータストリーム、たとえば5GBを生成するスクリプトを持っており、これらのデータをファイルに保存する必要があります。私は最初にリストを生成して一度に出力しようとしましたが、リストが増加するにつれて、コンピュータは非常に厳しく減速しました。だから私はそれらを数回出力することに決めました:私は100MBのリストがあるたびに出力し、リストをクリアします。 (これが私が最初の問題を抱えている理由です) これを行う方法はわかりません。これを行うことができるlibや関数はありますか?

+0

あなたは、既存のファイルに追加します。標準のファイルモードの概要については、[この回答](http://stackoverflow.com/a/1466036/4014959)を参照してください。パート1の –

+0

、追加モードでファイルを開くだけです。第2部では、あなたのコードを教えてください。 –

答えて

0

第二の点から始めるのをしてみましょう:あなたはメモリに格納リストが使用可能なRAMよりも大きい場合、コンピュータはラムとしてHDを使用して開始され、これは深刻なすべてのものを遅らせます。あなたの状況で出力する最適な方法は、可能な限りラムを埋めることです(あなたのPC上で実行されるソフトウェアの残りの部分には常に十分なスペースを確保してください)。

リストをファイルに保存する最も速い方法は、pickleを使用するため、書式化されたものよりもはるかに少ないバイナリデータを格納するようになっています。

ファイルに書き込むときは、ファイルを常に開いたままにしてください(with open('namefile', 'w') as fなど)。このように、ファイルを開く/閉じる時間を節約すると、カーソルは常に最後になります。あなたがそれを行うことに決めたら、何か悪いことが起きたときにデータを失わないようにファイルを書き終えたら、f.flush()を使ってください。とにかくappendメソッドは良い選択肢です。

あなたはいくつかのコードを提供する場合、あなたを助けるために容易になるだろう...

+1

スピードにピックルを使用するようアドバイスしないでください。これは適切なツールではありません。構造化されたデータの速度を望むのであれば、バイナリioを使用しますが、pickleは使用しないでください。 –

+0

これは別の方法です... –

関連する問題