3

今のところ、私は次のPythonコードを使用しています。

file = open(filePath, "r")
lines=file.readlines()
file.close()

ファイルに数行(10,000以上)があるとすると、複数のファイルに対してこれを行うと、プログラムが遅くなります。Pythonでこれを高速化する方法はありますか?さまざまなリンクを読むreadlinesはファイルの行をメモリに保存するため、コードが遅くなることを理解しています。

次のコードも試しましたが、得られた時間の増加は17%です。

lines=[line for line in open(filePath,"r")]

python2.4に他のモジュールはありますか(私は見逃したかもしれません)。ありがとう、Sandhya

4

1 に答える 1

6
for line in file:

これにより、ファイルオブジェクトを一度に1行ずつ読み取り、前の行をメモリから破棄するイテレータが提供されます。

ファイルオブジェクトはそれ自体のイテレータです。たとえば、iter(f)はfを返します(fが閉じられていない場合)。ファイルがイテレータとして使用される場合、通常はforループ(たとえば、f:print lineのfor行)で、next()メソッドが繰り返し呼び出されます。このメソッドは、次の入力行を返すか、EOFがヒットしたときにStopIterationを発生させます。forループをファイルの行をループする最も効率的な方法(非常に一般的な操作)にするために、next()メソッドは非表示の先読みバッファーを使用します。先読みバッファを使用した結果、next()を他のファイルメソッド(readline()など)と組み合わせても正しく機能しません。ただし、seek()を使用してファイルを絶対位置に再配置すると、先読みバッファーがフラッシュされます。バージョン2.3の新機能。

簡単な答え:行を変数に割り当てず、ループ内で必要な操作を実行するだけです。

于 2011-02-04T06:11:22.730 に答える