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