このモジュールは標準入力やファイルの並びにまたがるループを素早く書くため のヘルパークラスと関数を提供しています。
典型的な使い方は以下の通りです:
import fileinput for line in fileinput.input(): process(line)
このプログラムはsys.argv[1:]
に含まれる全てのファイルをまたいで繰
り返します。もし該当するものがなければ、sys.stdin
がデフォルトとし
て扱われます。ファイル名として'-'
が与えられた場合も、
sys.stdin
に置き換えられます。別のファイル名リストを使いたい時には、
input()の最初の引数にリストを与えます。単一ファイル名の文字列
も受け付けます。
全てのファイルはデフォルトでテキストモードでオープンされます。しかし、 input() や FileInput() をコールする際に mode パラメータを指定すれば、これをオーバーライドすることができます。 オープン中あるいは読み込み中にI/Oエラーが発生した場合には、 IOErrorが発生します。
sys.stdin
が2回以上使われた場合は、2回目以降は行を返しません。
ただしインタラクティブに利用している時や明示的にリセット
(sys.stdin.seek(0))
を使う)を行った場合はその限りではありません。
空のファイルは開いた後すぐ閉じられます。 空のファイルはファイル名リストの最後にある場合にしか外部に影響を与えませ ん。
ファイルの最後が改行文字で終っていない場合には、最後に改行文字を追加して 返します。
ファイルのオープン方法を制御するためのオープン時フックは、 input() あるいは FileInput() の openhook パラメータで設定します。このフックは、ふたつの引数 filename と mode をとる関数でなければなりません。そしてその関数の返り値は オープンしたファイルオブジェクトとなります。このモジュールには、便利な フックが既に用意されています。
以下の関数がこのモジュールの基本的なインタフェースです:
[files[, inplace[, backup[, mode[, openhook]]]]]) |
FileInputクラスのインスタンスを作ります。生成されたインスタンス は、このモジュールの関数群が利用するグローバルな状態として利用されます。 この関数への引数はFileInputクラスのコンストラクタへ渡されます。
バージョン 2.5 で 変更 された仕様: パラメータ mode および openhook が追加さ れました
以下の関数はinput()関数によって作られたグローバルな状態を利用 します。アクティブな状態が無い場合には、RuntimeErrorが発生し ます。
) |
現在読み込み中のファイル名を返します。一行目が読み込まれる前は
None
を返します。
) |
-1
を返します。
バージョン 2.5 で 新たに追加 された仕様です。
) |
0
を返します。最後のファイルの最終行が読み込まれた後には、その
行の行番号を返します。
) |
現在のファイル中での行番号を返します。1行目が読み込まれる前は0
を
返します。最後のファイルの最終行が読み込まれた後には、その
行のファイル中での行番号を返します。
) |
) |
sys.stdin
から読まれていればTrue、そうでなけ
ればFalseを返します。
) |
現在のファイルを閉じます。次の繰り返しでは(存在すれば)次のファイルの最初 の行が読み込まれます。閉じたファイルの読み込まれなかった行は、累積の行 数にカウントされません。ファイル名は次のファイルの最初の行が読み込まれ るまで変更されません。最初の行の読み込みが行われるまでは、この関数は呼 び出されても何もしませんので、最初のファイルをスキップするために利用す ることはできません。最後のファイルの最終行が読み込まれた後にも、この関 数は呼び出されても何もしません。
) |
このモジュールのシーケンスの振舞いを実装しているクラスの サブクラスを作ることもできます。
[files[, inplace[, backup[, mode[, openhook]]]]]) |
mode を使用すると、open() に渡すファイルモードを指
定することができます。これは 'r'
、'rU'
、'U'
お
よび 'rb'
のうちのいずれかとなります。
openhook を指定する場合は、ふたつの引数 filename と mode をとる関数でなければなりません。この関数の返り値は、オー プンしたファイルオブジェクトとなります。inplace と openhook を同時に使うことはできません。
バージョン 2.5 で 変更 された仕様: パラメータ mode および openhook が追加さ れました
その場で保存するオプション機能:
キーワード引数 inplace=1
が input()か
FileInputクラスのコンストラクタに渡された場合には、
入力ファイルはバックアップファイルに移動され、標準出力が入力ファイルに設
定されます(バックアップファイルと同じ名前のファイルが既に存在していた
場合には、警告無しに置き替えられます)。
これによって入力ファイルをその場で書き替えるフィルタを書くことができます。
キーワード引数backup='.<拡張子>'
も与えられていれば、バック
アップファイルの拡張子を決めることができます。デフォルトでは
'.bak'
になっています。出力先のファイルが閉じられればバックアップ
ファイルは消されます。その場で保存する機能は、標準入力を読み込んでいる間
は無効にされます。
警告: 現在の実装はMS-DOSの8+3ファイルシステムでは動作しません。
このモジュールには、次のふたつのオープン時フックが用意されています。
filename, mode) |
'.gz'
や'.bz2'
の)
ファイルを、gzipモジュールやbz2モジュールを使って
透過的にオープンします。ファイルの拡張子が'.gz'
や
'.bz2'
でない場合は、通常通りファイルをオープンします
(つまり、open() をコールする際に伸長を行いません)。
使用例: "fi = fileinput.FileInput(openhook=fileinput.hook_compressed)"
バージョン 2.5 で 新たに追加 された仕様です。
encoding) |
使用例: "fi = fileinput.FileInput(openhook=fileinput.hook_encoded("iso-8859-1"))"
注意: このフックでは、指定したencodingによっては FileInputがUnicode文字列を返す可能性があります。 バージョン 2.5 で 新たに追加 された仕様です。