今回は、Pythonのfileinputモジュールの使い方を見ていきましょう。
このモジュールは、入力としてファイルのリストを素早く処理するための非常に便利なユーティリティ・モジュールです。
このモジュールを使って、入力ファイルを効果的に反復処理する方法を見てみましょう。
Python fileinput モジュールの使用方法
このモジュールはPythonの標準ライブラリの一部ですので、pipでインストールする必要はありません。
このモジュールをインポートするには、以下のように記述します。
import fileinput
|
通常、1つの入力ファイルに対して何らかのIO操作(読み込み/書き込み)を行いたい場合、一般的にはopen()関数を使用して実現することができます。
しかし、複数のファイルを渡す必要がある場合は、 fileinput
を使用すれば、すべてのファイルを直接ループ処理で高速に処理することができます。
それでは、例を見てみましょう。
1. 複数のファイルの読み込み
このモジュールの主な用途は、fileinput.FileInput
インスタンスをコンテキストマネージャーとして使用することです。
import fileinput
with fileinput.FileInput(files = ( 'a.txt' , 'b.txt' ), mode = 'r' ) as input :
...
|
ここでは、キーワード引数 files
に好きなだけファイルを渡すことができます。
単一のファイルを渡すこともできます。
ファイルを開くモードを指定するには、キーワード引数 mode
を指定する必要があります。
このディレクトリに、次のような内容の2つのファイル a.txt
と b.txt
があるとします。
$ cat a.txt
Hello from Python! This is a.txt $ cat b.txt
Hello from Python! this is b.txt |
さて、この2つのファイルを入力としてサンプルプログラムに渡すことにします。
import fileinput
with fileinput.FileInput(files = ( 'a.txt' , 'b.txt' ), mode = 'r' ) as input :
for line in input :
print (line)
|
結果は以下の通りです。
Hello from Python! This is a.txt Hello from Python! This is b.txt |
確かに、両方のファイルを印刷することができました。
各行の間にスペースがあるのは、print()
が各ステートメントの後に改行を追加しているためです。
このファイルにはすでに改行があるので、その間にさらに1行を印刷します。
2. 最初の行の確認とファイル名の読み込み
さて、このモジュールには、私たちが有利に使える他のメソッドがあります。
もし、現在読み込まれているファイルの名前を見たい場合は、 fileinput.filename()
メソッドを使用します。
しかし、このメソッドはまだ1行も読み込まれていない場合は None
を返します! したがって、このメソッドは最初の読み込みの後にのみ使用することができます。
もし、読み込まれたファイルの名前を知りたい場合は、もう1つのフラグを使用することができます。
fileinput.isfirstline()メソッドは、読み込まれた行が最初の行であれば
True` を返します! つまり、このフラグが True であれば、コンソールに表示することができます。
以下は、同じプログラムを使って a.txt
と b.txt
を処理する簡単な例です。
import fileinput
with fileinput.FileInput(files = ( 'a.txt' , 'b.txt' ), mode = 'r' ) as input :
for idx, line in enumerate ( input ):
if input .isfirstline() = = True :
# We will indicate the file name being read if the first line is read
print (f 'Reading file {input.filename()}...' )
print (line)
|
結果は以下の通りです。
Reading file a.txt... Hello from Python! This is a.txt Reading file b.txt... Hello from Python! This is b.txt |
見てわかるように、最初の行を読み込むときに、読み込んでいるファイルの名前を表示することができます。
同様に、他のヘルパーメソッドも使って入力ファイルを素早く読み込むことができます。
もっと詳しく知りたい方は、ドキュメントをご覧ください。
まとめ
この記事では、Pythonのfileinputモジュールを使って、stdin
からの入力ファイルを素早くループさせる方法を学びました。