2011-03-11 15 views
3

これが繰り返し質問の場合は申し訳ありません。どのように私は行のストリームとしてデータを処理するPythonスクリプトを記述するのですか?私は処理しているファイルが膨大で、ファイルをメモリに読み込まないため、これを行う必要があります。テキストストリームを処理するプログラムをPythonで書く方法は?

私は、一度に1行のファイルを読む可能性があることを知っていますが、テキストストリームを処理するものが必要です。あなたは、標準入力から読み込みたい場合

+2

「行のストリーム」と「一度に1行のファイルを読み取る」との違いは何ですか? –

+0

まあ、入力ストリームでは、どこから来たのか気にしません。私は入力のファイル処理をしていません。一度にオンラインで読むと言うと、それはファイルを知っていることを意味し、私のプログラムはそれを開いたり閉じたりする責任があります。 – Sam

答えて

14

このanswerに記載されているように、stdinからデータを読み取ることができます。

cat file.txt | python script.py 

することができますもちろんパイプ出力の:あなたは、ファイルを処理したい場合は、単に(Unixプラットフォーム上で)このようなスクリプトを呼び出す

for line in sys.stdin: 
    # do suff 

:これは、コード内でそのようになります。他のプログラムの中にもあります。

0
f = open('somefile.txt') 
for line in f: 
    process(line) 

実は、fは、文字列、あるいはsys.stdinのリストので、たとえば、反復可能である何もすることができます。

+1

完全性のために、f.close()を追加するか、_with_ブロックを使用する必要があります。 – extraneon

+0

あなたはそうです、それは当然です。しかし、それがすべてのプログラム(行を読み込んで 'process()'を呼び出す)であれば、ファイルを明示的に閉じることはできません –

+1

このような質問をする人は通常初心者です。彼らはより良いことを知らないので、彼らに最高の練習しか見せない。 –

7

あなたのケースは、かなり正確にthe fileinput moduleのために設計されています。あなたが行うことができますこの方法:

python script.py file1.txt file2.txt file3.txt file4.txt 

script.py

import fileinput 
for line in fileinput.input(): 
    # do stuff here 

でFileInputクラスを使用するための追加ボーナスは、あなたがおおよそSpace_C0wb0yが最初のパラメータとしてダッシュを追加することを示唆し、同じことを行うことができるということです。

python script.py - < file.txt 

または

cat file.txt | python script.py - 

fileinputはSpace_C0wb0yによってリンクされている質問への回答に記載されていますが、私はそれがどのように活用できるかを覚えています。

関連する問題