これが繰り返し質問の場合は申し訳ありません。どのように私は行のストリームとしてデータを処理するPythonスクリプトを記述するのですか?私は処理しているファイルが膨大で、ファイルをメモリに読み込まないため、これを行う必要があります。テキストストリームを処理するプログラムをPythonで書く方法は?
私は、一度に1行のファイルを読む可能性があることを知っていますが、テキストストリームを処理するものが必要です。あなたは、標準入力から読み込みたい場合
これが繰り返し質問の場合は申し訳ありません。どのように私は行のストリームとしてデータを処理するPythonスクリプトを記述するのですか?私は処理しているファイルが膨大で、ファイルをメモリに読み込まないため、これを行う必要があります。テキストストリームを処理するプログラムをPythonで書く方法は?
私は、一度に1行のファイルを読む可能性があることを知っていますが、テキストストリームを処理するものが必要です。あなたは、標準入力から読み込みたい場合
このanswerに記載されているように、stdin
からデータを読み取ることができます。
cat file.txt | python script.py
することができますもちろんパイプ出力の:あなたは、ファイルを処理したい場合は、単に(Unixプラットフォーム上で)このようなスクリプトを呼び出す
for line in sys.stdin:
# do suff
:これは、コード内でそのようになります。他のプログラムの中にもあります。
f = open('somefile.txt')
for line in f:
process(line)
実は、f
は、文字列、あるいはsys.stdin
のリストので、たとえば、反復可能である何もすることができます。
完全性のために、f.close()を追加するか、_with_ブロックを使用する必要があります。 – extraneon
あなたはそうです、それは当然です。しかし、それがすべてのプログラム(行を読み込んで 'process()'を呼び出す)であれば、ファイルを明示的に閉じることはできません –
このような質問をする人は通常初心者です。彼らはより良いことを知らないので、彼らに最高の練習しか見せない。 –
あなたのケースは、かなり正確に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によってリンクされている質問への回答に記載されていますが、私はそれがどのように活用できるかを覚えています。
「行のストリーム」と「一度に1行のファイルを読み取る」との違いは何ですか? –
まあ、入力ストリームでは、どこから来たのか気にしません。私は入力のファイル処理をしていません。一度にオンラインで読むと言うと、それはファイルを知っていることを意味し、私のプログラムはそれを開いたり閉じたりする責任があります。 – Sam