# 5.12 `xreadlines` -- Efficient iteration over a file

New in version 2.1.

Deprecated since release 2.3. Use `for line in file` instead.

This module defines a new object type which can efficiently iterate over the lines of a file. An xreadlines object is a sequence type which implements simple in-order indexing beginning at `0`, as required by `for` statement or the `filter()` function.

Thus, the code

      import xreadlines, sys

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

has approximately the same speed and memory consumption as

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

except the clarity of the `for` statement is retained in the former case.

`xreadlines`(fileobj)
  Return a new xreadlines object which will iterate over the contents of fileobj. fileobj must have a `readlines()` method that supports the sizehint parameter. Note: Because the `readlines()` method buffers data, this effectively ignores the effects of setting the file object as unbuffered.

An xreadlines object s supports the following sequence operation:

Operation | Result
--- | ---
`s[i]` | i'th line of s

If successive values of i are not sequential starting from `0`, this code will raise `RuntimeError`.

After the last line of the file is read, this code will raise an `IndexError`.