2011-10-27 14 views
7

私はPythonで標準入力から大量の行を読み込もうとしています。Python:標準入力から膨大な数の行を読む

more hugefile.txt | python readstdin.py 

問題は、1行だけを読み込んだ直後にプログラムがフリーズすることです。

これは最初の8バイトを出力しますが、終了すると予想しますが、決してそれはありません。私は最初のバイトを読むだけでなく、ファイル全体をメモリに読み込もうとしていると思います。

sys.stdin.readlineと同じ問題()

私は本当に何をしたいのか、すべての行を読み取ることが、バッファと私はメモリが不足しないのは勿論です。

私は、Python 2.6

+4

は、なぜあなたはより多くの代わりに猫のかさえ、単純なリダイレクトの使用していますstdin? –

+0

あなたのプログラムが "フリーズ"する理由はありません。あなたはどうやってそれが凍っていることを検知していますか? –

+0

ああ、私はWindowsのコマンドラインからそれを実行していた。窓に猫はいない。 – Martin

答えて

11

python readstdin.py < hugefile.txt 
+0

メモリはここでどのように機能していますか?一度に一つの行を読み込んで、次の行が読み込まれたときにその行をバッファから削除しますか?ありがとう –

+0

はい、行を一度に読み込み、それを行変数に設定します。行の古い値は、失われたときに再利用されます。 –

2

Back in the day, you had to use xreadlines to get efficient huge line-at-a-time IOを使用しています - とドキュメントは、今あなたがfor line in fileを使用するようお願いいたします。

もちろん、これは実際には一度に1つずつ作業している場合にのみ役立ちます。大きなバイナリブロブを読み込んで他のものに渡すだけなら、他のメカニズムも効率的かもしれません。

import sys 

for line in sys.stdin: 
    # do something... 
    print line, 

あなたは、このようなスクリプトを実行することができます:これは、近代的なPythonで効率的に動作するはず

関連する問題