\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}.