fileinputモジュール

コマンドライン引数で指定したファイルや標準入力からの入力を簡単に処理できるモジュール。
fileinput.input で各ファイルから1行ずつ読み込んでくれる。

次の例は、ファイルの各行をファイル名と行番号つきで出力する。

import fileinput

for line in fileinput.input():
    print fileinput.filename(), fileinput.filelineno(), ":", line.rstrip("\n")

実行例:

^o^ > python file_input.py fib.py file_read.py
fib.py 1 : def fib():
fib.py 2 :     a = 1
fib.py 3 :     b = 1
fib.py 4 :     while True:
fib.py 5 :         yield a
fib.py 6 :         a, b = b, a+b
fib.py 7 :
fib.py 8 :
fib.py 9 : i = fib()
fib.py 10 :
fib.py 11 : for c in range(10):
fib.py 12 :     print i.next()
fib.py 13 :
file_read.py 1 : import sys
file_read.py 2 :
file_read.py 3 : filename = sys.argv[1]
file_read.py 4 : print filename
file_read.py 5 : print "--"
file_read.py 6 :
file_read.py 7 : file = open(filename, "r")
file_read.py 8 : contents = file.read()
file_read.py 9 : print contents
file_read.py 10 : file.close()
file_read.py 11 :

標準入力へリダイレクトした場合:

^o^ > python file_input.py < fib.py
<stdin> 1 : def fib():
<stdin> 2 :     a = 1
<stdin> 3 :     b = 1
<stdin> 4 :     while True:
<stdin> 5 :         yield a
<stdin> 6 :         a, b = b, a+b
<stdin> 7 :
<stdin> 8 :
<stdin> 9 : i = fib()
<stdin> 10 :
<stdin> 11 : for c in range(10):
<stdin> 12 :     print i.next()
<stdin> 13 :

パイプを使った場合:

^o^ > type fib.py | python file_input.py
<stdin> 1 : def fib():
<stdin> 2 :     a = 1
<stdin> 3 :     b = 1
<stdin> 4 :     while True:
<stdin> 5 :         yield a
<stdin> 6 :         a, b = b, a+b
<stdin> 7 :
<stdin> 8 :
<stdin> 9 : i = fib()
<stdin> 10 :
<stdin> 11 : for c in range(10):
<stdin> 12 :     print i.next()
<stdin> 13 :