Python の fileinput モジュール便利

python の fileinput モジュール知らなかった。便利ですねこれ。

10.2. fileinput — Iterate over lines from multiple input streams — Python v2.7.6 documentation


pythonスクリプトを呼び出す際、コマンドライン引数にファイルを指定していればそのファイルから、
指定していなければ標準入力を読み込みます。
典型的なUNIXコマンドと似た動きですね。
だからちょっとしたフィルターコマンドを作るのに重宝します。



例 count_lines.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import fileinput
count = 0
for line in fileinput.input():
    count += 1
print count


実行

 $ ./count_lines.py count_lines.py
 7
 $ cat count_lines.py | ./count_lines.py
 7

複数ファイルを指定するとまとめて処理されます。

 $ ./count_lines.py count_lines.py count_lines.py
 14


input の引数にファイルのリストを渡すこともできます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import fileinput
import glob

files = glob.glob("*.txt")

count = 0
f = fileinput.input(files)
for line in f:
    count += 1
f.close()
print count