\section{\module{xreadlines} ---
         Efficient iteration over a file}

\declaremodule{extension}{xreadlines}
\modulesynopsis{Efficient iteration over the lines of a file.}

\versionadded{2.1}

\deprecated{2.3}{Use \samp{for \var{line} in \var{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 \code{0}, as
required by \keyword{for} statement or the
\function{filter()} function.

Thus, the code

\begin{verbatim}
import xreadlines, sys

for line in xreadlines.xreadlines(sys.stdin):
    pass
\end{verbatim}

has approximately the same speed and memory consumption as

\begin{verbatim}
while 1:
    lines = sys.stdin.readlines(8*1024)
    if not lines: break
    for line in lines:
        pass
\end{verbatim}

except the clarity of the \keyword{for} statement is retained in the
former case.

\begin{funcdesc}{xreadlines}{fileobj}
  Return a new xreadlines object which will iterate over the contents
  of \var{fileobj}.  \var{fileobj} must have a \method{readlines()}
  method that supports the \var{sizehint} parameter.  \note{Because
  the \method{readlines()} method buffers data, this effectively
  ignores the effects of setting the file object as unbuffered.}
\end{funcdesc}

An xreadlines object \var{s} supports the following sequence
operation:

\begin{tableii}{c|l}{code}{Operation}{Result}
 \lineii{\var{s}[\var{i}]}{\var{i}'th line of \var{s}}
\end{tableii}

If successive values of \var{i} are not sequential starting from
\code{0}, this code will raise \exception{RuntimeError}.

After the last line of the file is read, this code will raise an
\exception{IndexError}.
