# 5.16 `xreadlines` -- ファイルの各行に対する効率のよい反復処理

バージョン2.1 以降で新規追加された 仕様です。

リリース 2.3 以降で撤廃された仕様です。 `for line in file` を代わりに使ってください。

このモジュールでは、あるファイル内の各行に対して効率的に反復を行える ような新たなオブジェクト型を定義します。xreadline オブジェクトは `for` 文や関数 `filter()` で必要とされるような、 `0` から始まる単純かつ順序正しいインデクス付けを実装した配列型 です。

つまり、以下のコード

    import xreadlines, sys

    for line in xreadlines.xreadlines(sys.stdin):
        pass

は、

    while 1:
        lines = sys.stdin.readlines(8*1024)
        if not lines: break
        for line in lines:
            pass

とだいたい同じ速度とメモリ消費になります。ただし前者は `for` 文のままなのでより明快です。

`xreadlines`( | fileobj)

  fileobj の内容にわたって反復を行うような、新しい xreadlines オブジェクトを返します。fileobj は、引数 sizehint を サポートする `readlines()` メソッドを持っていなければなりません。 注意: `readlines()` メソッドばデータをバッファするので、ファイル オブジェクトを非バッファリングに設定しても無視されます。

xreadlines オブジェクト s は以下の配列操作をサポートします:

操作 | 結果
--- | ---
`s[i]` | s の i 行目

i の値が `0` から始まる連続した数でない場合、 このコードは 例外`RuntimeError` を送出します。

ファイルの最後の行が読み出された後、このコードは例外 `IndexError` を送出します。