fileinput —複数の入力ストリームからの行を反復処理します—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/library/fileinput
移動先:案内検索

fileinput —複数の入力ストリームからの行を反復処理します

ソースコード: :source: `Lib / fileinput.py`



このモジュールは、ヘルパークラスと関数を実装して、標準の入力またはファイルのリストに対してループをすばやく記述します。 1つのファイルを読み書きするだけの場合は、 open()を参照してください。

典型的な使用法は次のとおりです。

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

これは、sys.argv[1:]にリストされているすべてのファイルの行を繰り返し、リストが空の場合はデフォルトでsys.stdinになります。 ファイル名が'-'の場合、sys.stdinにも置き換えられ、オプションの引数 mode および openhook は無視されます。 ファイル名の代替リストを指定するには、それを最初の引数として input()に渡します。 単一のファイル名も許可されます。

すべてのファイルはデフォルトでテキストモードで開かれますが、 input()または FileInput の呼び出しで mode パラメーターを指定することでこれをオーバーライドできます。 ファイルのオープンまたは読み取り中にI / Oエラーが発生すると、 OSError が発生します。

バージョン3.3で変更: IOError が発生していました。 これは OSError のエイリアスになりました。


sys.stdinが複数回使用された場合、2回目以降の使用では、おそらくインタラクティブな使用を除いて、または明示的にリセットされた場合を除いて、行は返されません(例: sys.stdin.seek(0)を使用)。

空のファイルが開かれ、すぐに閉じられます。 ファイル名のリストにそれらが存在することがまったく目立つのは、最後に開いたファイルが空のときだけです。

行はそのままの状態で返されます。つまり、ファイルの最後の行に改行がない場合があります。

openhook パラメーターを介して fileinput.input()または FileInput()に開くフックを指定することにより、ファイルを開く方法を制御できます。 フックは、 filenamemode の2つの引数を取り、それに応じて開かれたファイルのようなオブジェクトを返す関数である必要があります。 このモジュールには、2つの便利なフックがすでに用意されています。

次の関数は、このモジュールの主要なインターフェイスです。

fileinput.input(files=None, inplace=False, backup=, *, mode='r', openhook=None)

FileInput クラスのインスタンスを作成します。 インスタンスは、このモジュールの機能のグローバル状態として使用され、反復中に使用するために返されます。 この関数のパラメーターは、 FileInput クラスのコンストラクターに渡されます。

FileInput インスタンスは、 with ステートメントでコンテキストマネージャーとして使用できます。 この例では、 input は、withステートメントが終了した後、例外が発生した場合でも閉じられます。

with fileinput.input(files=('spam.txt', 'eggs.txt')) as f:
    for line in f:
        process(line)

バージョン3.2で変更:コンテキストマネージャーとして使用できます。

バージョン3.8で変更:キーワードパラメータ mode および openhook はキーワードのみになりました。

次の関数は、 fileinput.input()によって作成されたグローバル状態を使用します。 アクティブな状態がない場合、 RuntimeError が発生します。

fileinput.filename()
現在読み取られているファイルの名前を返します。 最初の行が読み取られる前に、Noneを返します。
fileinput.fileno()
現在のファイルの整数の「ファイル記述子」を返します。 ファイルが開かれていない場合(最初の行の前およびファイル間)、-1を返します。
fileinput.lineno()
読み取ったばかりの行の累積行番号を返します。 最初の行が読み取られる前に、0を返します。 最後のファイルの最後の行が読み取られた後、その行の行番号を返します。
fileinput.filelineno()
現在のファイルの行番号を返します。 最初の行が読み取られる前に、0を返します。 最後のファイルの最後の行が読み取られた後、ファイル内のその行の行番号を返します。
fileinput.isfirstline()
読み取ったばかりの行がファイルの最初の行である場合はTrueを返し、そうでない場合はFalseを返します。
fileinput.isstdin()
最後の行がsys.stdinから読み取られた場合は、Trueを返します。それ以外の場合は、Falseを返します。
fileinput.nextfile()
現在のファイルを閉じて、次の反復で次のファイル(存在する場合)から最初の行が読み取られるようにします。 ファイルから読み取られなかった行は、累積行数にカウントされません。 ファイル名は、次のファイルの最初の行が読み取られるまで変更されません。 最初の行が読み取られる前は、この関数は効果がありません。 最初のファイルをスキップするために使用することはできません。 最後のファイルの最後の行が読み取られた後、この関数は効果がありません。
fileinput.close()
シーケンスを閉じます。

モジュールによって提供されるシーケンス動作を実装するクラスは、サブクラス化にも使用できます。

class fileinput.FileInput(files=None, inplace=False, backup=, *, mode='r', openhook=None)

クラス FileInput は実装です。 そのメソッド filename()fileno()lineno()filenameno()、 isfirstline()[X159X ]、 isstdin()nextfile()、および close()は、モジュール内の同じ名前の関数に対応します。 さらに、次の入力行を返す readline()メソッドと、シーケンス動作を実装する__getitem__()メソッドがあります。 シーケンスには、厳密に順番にアクセスする必要があります。 ランダムアクセスと readline()を混在させることはできません。

mode を使用すると、 open()に渡すファイルモードを指定できます。 'r''rU''U''rb'のいずれかである必要があります。

openhook は、指定された場合、 filenamemode の2つの引数を取り、それに応じて開かれたファイルのようなオブジェクトを返す関数である必要があります。 インプレースオープンフックを一緒に使用することはできません。

FileInput インスタンスは、 with ステートメントのコンテキストマネージャーとして使用できます。 この例では、 input は、withステートメントが終了した後、例外が発生した場合でも閉じられます。

with FileInput(files=('spam.txt', 'eggs.txt')) as input:
    process(input)

バージョン3.2で変更:コンテキストマネージャーとして使用できます。

バージョン3.4以降非推奨: 'rU'および'U'モード。

バージョン3.8以降非推奨: __getitem__()メソッドのサポートは非推奨になりました。

バージョン3.8で変更:キーワードパラメータ mode および openhook はキーワードのみになりました。

オプションのインプレースフィルタリング:キーワード引数inplace=Truefileinput.input()または FileInput コンストラクターに渡された場合はバックアップファイルに移動され、標準出力は入力ファイルに送信されます(バックアップファイルと同じ名前のファイルがすでに存在する場合は、サイレントに置き換えられます)。 これにより、入力ファイルを所定の位置に書き換えるフィルターを作成できます。 backup パラメーターが指定されている場合(通常はbackup='.<some extension>'として)、バックアップファイルの拡張子が指定され、バックアップファイルは残ります。 デフォルトでは、拡張子は'.bak'であり、出力ファイルを閉じると削除されます。 標準入力が読み取られると、インプレースフィルタリングは無効になります。

このモジュールでは、次の2つのオープニングフックが提供されます。

fileinput.hook_compressed(filename, mode)

gzip および bz2 モジュールを使用して、gzipおよびbzip2(拡張子'.gz'および'.bz2'で認識)で圧縮されたファイルを透過的に開きます。 ファイル名拡張子が'.gz'または'.bz2'でない場合、ファイルは正常に開かれます(つまり、解凍せずに open()を使用します)。

使用例:fi = fileinput.FileInput(openhook=fileinput.hook_compressed)

fileinput.hook_encoded(encoding, errors=None)

指定されたエンコーディングおよびエラーを使用してファイルを読み取ることにより、 open()で各ファイルを開くフックを返します。

使用例:fi = fileinput.FileInput(openhook=fileinput.hook_encoded("utf-8", "surrogateescape"))

バージョン3.6で変更:オプションのエラーパラメーターが追加されました。