8

現在、大量の Twitter ファイルを処理するための Python コードを作成しています。これらのファイルは非常に大きいため、メモリに収まりません。彼らと仕事をするには、基本的に2つの選択肢があります。

  1. ファイルをメモリに収まる小さなファイルに分割できます。

  2. 大きなファイルを 1 行ずつ処理できるので、一度にファイル全体をメモリに収める必要はありません。実装を容易にするために、後者をお勧めします。

ただし、ファイル全体をメモリに読み込み、そこから操作する方が速いかどうか疑問に思っています。ディスクから常にファイルを 1 行ずつ読み取るのが遅いようです。しかし、繰り返しになりますが、これらのプロセスが Python でどのように機能するかを完全には理解していません。ファイル全体をメモリに読み込んでそこから操作する場合よりも、ファイルを 1 行ずつ読み込むとコードが遅くなるかどうかは誰にもわかりませんか?

4

2 に答える 2

10

本当に高速なファイル読み取りについては、mmapモジュールをご覧ください。これにより、使用可能な RAM よりもはるかに大きい場合でも、ファイル全体が仮想メモリの大きなチャンクとして表示されます。ファイルが 3 または 4 ギガバイトを超える場合は、64 ビット OS (および Python の 64 ビット ビルド) を使用する必要があります。

サイズが 30 GB を超えるファイルに対してこれを行ったところ、良好な結果が得られました。

于 2012-05-05T09:20:41.910 に答える
1

ファイルを1行ずつ処理する場合は、ファイルオブジェクトをイテレータとして使用できます。

for line in open('file', 'r'):
    print line

これはかなりメモリ効率が良いです。一度に一連の行を処理する場合は、 sizehintreadlines()パラメーターを指定してファイルオブジェクトのメソッドを使用することもできます。これは、sizehintバイトに加えて、最後の行を完了するのに十分なバイト数を読み込みます。

于 2012-05-05T09:27:39.657 に答える