5.6 標準モジュール fileinput

 

このモジュールは標準入力またはファイルリストに対して、繰り返し処理を速く書く ためのヘルパークラスと関数を実装しています。

典型的な使用例は以下のようになります。

import fileinput
for line in fileinput.input():
    process(line)

sys.argv[1:]でリスト(そのリストが空ならsys.stdinが 使われます)されたすべてのファイルの各行に対して繰り返しを行います。 ファイル名が'-'であればそれもsys.stdinで置き換えられます。 ファイル名の代替リストを指定したければ、それをinput()の第一引数に 渡して下さい。ファイル名が一つでも許されます。

すべてのファイルはテキストモードでオープンされます。オープンまたは読み込み 中にI/Oエラーが発生するとIOError例外が発生します。

sys.stdinが2度以上使われると、対話型で利用している場合または 明示的にリセット(例えばsys.stdin.seek(0)を使って)された場合を除いて 2度目以降は何も行を返しません。

空のファイルはオープンされてすぐにクローズされます。 ファイル名リストの中にそれらがあることに気付くのは最後にオープンされた ファイルが空であった時だけです。

ファイルの最終行がニューライン文字で終っていなくても大丈夫です。 最後のニューライン文字がある場合はそれを含んだ行を返します。

以下の関数がこのモジュールの基本的なインタフェースです。

input ([files[, inplace[, backup]]])
FileInputクラスのインスタンスを生成します。インスタンスは このモジュールの関数に対してグローバルな状態として使われますし、 繰り返しの間使うために返されます。

以下の関数はinput()で生成されたグローバルな状態を使用します。 アクティブな状態がなければRuntimeError例外が発生します。

filename ()
現在読み込んでいるファイルの名前を返します。最初の行が読み込まれる前は Noneを返します。

lineno ()
すでに読み込まれた累積行数を返します。最初の行が読み込まれる前は Noneを返します。最後のファイルの最後の行が読み込まれた 後はその行の行番号を返します。

filelineno ()
現在のファイルにおける行番号を返します。最初の行が読み込まれる前は 0を返します。最後のファイルの最後の行が読み込まれた後は そのファイル内でのその行の行番号を返します。

isfirstline ()
読み込まれた行がそのファイルの最初の行であれば真を返します。

isstdin ()
最後の行がsys.stdinから読み込まれたのであれば真を返します。

nextfile ()
現在のファイルをクローズして次の繰り返しでは(もしあれば)次のファイル から最初の行を読むようにします。ファイルから読み込まれなかった行は 累積行数にはカウントされません。 次のファイルから最初の行が読み込まれるまではファイル名は変更されません。 最初の行が読み込まれる以前はこの関数は効果を持ちません。つまり最初のファイル をスキップするために使うことは出来ません。最後のファイルの最後の行が 読み込まれた後はこの関数は効果を持ちません。

close ()
このシーケンスをクローズします。

このモジュールが提供するシーケンスに対する動作を実装したクラスを サブクラス化のために利用できます。

FileInput ([files[, inplace[, backup]]])
クラスFileInputがその実装です。つまりそのメソッド filename(), lineno(), fileline(), isfirstline(), isstdin(), nextfile()および close()はモジュールの同じ名前の関数に対応しています。 その他に、次の入力行を返すreadline()メソッドとそのシーケンス に対する動作を実装する__getitem__()メソッドを持っています。 そのシーケンスは厳密に連続した順でアクセスされなければなりません。 つまり、ランダムアクセスとreadline()は混ぜて使うことは出来ません。

オプションの直接書き換えフィルタリング: キーワード引数inplace=1input()または FileInputコンストラクタに渡されたときは、そのファイルはバックアップが とられ、標準出力がその入力ファイルに向けられます。 これにより入力ファイルを直接書き換えるフィルタを書くことが出来ます。 キーワード引数backup='.<some extension>'も指定されて いれば、それがバックアップファイルの拡張子を指定し、そのバックアップファイル はそのまま残されます。デフォルトでは拡張子は'.bak'で出力ファイルが クローズされたときに削除されます。直接書き換えフィルタリングは標準入力から 読み込まれているときには無効です。

警告: 現在の実装はMS-DOSの8+3ファイルシステムでは動作しません。

guido@python.org