2007-08-15 11:28:01 -03:00
|
|
|
:mod:`fileinput` --- Iterate over lines from multiple input streams
|
|
|
|
===================================================================
|
|
|
|
|
|
|
|
.. module:: fileinput
|
|
|
|
:synopsis: Loop over standard input or a list of files.
|
|
|
|
.. moduleauthor:: Guido van Rossum <guido@python.org>
|
|
|
|
.. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
|
|
|
|
|
|
|
|
|
2007-09-13 11:54:30 -03:00
|
|
|
This module implements a helper class and functions to quickly write a
|
|
|
|
loop over standard input or a list of files. If you just want to read or
|
|
|
|
write one file see :func:`open`.
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
The typical use is::
|
|
|
|
|
|
|
|
import fileinput
|
|
|
|
for line in fileinput.input():
|
|
|
|
process(line)
|
|
|
|
|
|
|
|
This iterates over the lines of all files listed in ``sys.argv[1:]``, defaulting
|
|
|
|
to ``sys.stdin`` if the list is empty. If a filename is ``'-'``, it is also
|
|
|
|
replaced by ``sys.stdin``. To specify an alternative list of filenames, pass it
|
|
|
|
as the first argument to :func:`input`. A single file name is also allowed.
|
|
|
|
|
|
|
|
All files are opened in text mode by default, but you can override this by
|
|
|
|
specifying the *mode* parameter in the call to :func:`input` or
|
|
|
|
:class:`FileInput()`. If an I/O error occurs during opening or reading a file,
|
|
|
|
:exc:`IOError` is raised.
|
|
|
|
|
|
|
|
If ``sys.stdin`` is used more than once, the second and further use will return
|
|
|
|
no lines, except perhaps for interactive use, or if it has been explicitly reset
|
|
|
|
(e.g. using ``sys.stdin.seek(0)``).
|
|
|
|
|
|
|
|
Empty files are opened and immediately closed; the only time their presence in
|
|
|
|
the list of filenames is noticeable at all is when the last file opened is
|
|
|
|
empty.
|
|
|
|
|
|
|
|
Lines are returned with any newlines intact, which means that the last line in
|
|
|
|
a file may not have one.
|
|
|
|
|
|
|
|
You can control how files are opened by providing an opening hook via the
|
|
|
|
*openhook* parameter to :func:`fileinput.input` or :class:`FileInput()`. The
|
|
|
|
hook must be a function that takes two arguments, *filename* and *mode*, and
|
|
|
|
returns an accordingly opened file-like object. Two useful hooks are already
|
|
|
|
provided by this module.
|
|
|
|
|
|
|
|
The following function is the primary interface of this module:
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: input([files[, inplace[, backup[, mode[, openhook]]]]])
|
|
|
|
|
|
|
|
Create an instance of the :class:`FileInput` class. The instance will be used
|
|
|
|
as global state for the functions of this module, and is also returned to use
|
|
|
|
during iteration. The parameters to this function will be passed along to the
|
|
|
|
constructor of the :class:`FileInput` class.
|
|
|
|
|
|
|
|
.. versionchanged:: 2.5
|
|
|
|
Added the *mode* and *openhook* parameters.
|
|
|
|
|
|
|
|
The following functions use the global state created by :func:`fileinput.input`;
|
|
|
|
if there is no active state, :exc:`RuntimeError` is raised.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: filename()
|
|
|
|
|
|
|
|
Return the name of the file currently being read. Before the first line has
|
|
|
|
been read, returns ``None``.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: fileno()
|
|
|
|
|
|
|
|
Return the integer "file descriptor" for the current file. When no file is
|
|
|
|
opened (before the first line and between files), returns ``-1``.
|
|
|
|
|
|
|
|
.. versionadded:: 2.5
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: lineno()
|
|
|
|
|
|
|
|
Return the cumulative line number of the line that has just been read. Before
|
|
|
|
the first line has been read, returns ``0``. After the last line of the last
|
|
|
|
file has been read, returns the line number of that line.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: filelineno()
|
|
|
|
|
|
|
|
Return the line number in the current file. Before the first line has been
|
|
|
|
read, returns ``0``. After the last line of the last file has been read,
|
|
|
|
returns the line number of that line within the file.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: isfirstline()
|
|
|
|
|
|
|
|
Returns true if the line just read is the first line of its file, otherwise
|
|
|
|
returns false.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: isstdin()
|
|
|
|
|
|
|
|
Returns true if the last line was read from ``sys.stdin``, otherwise returns
|
|
|
|
false.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: nextfile()
|
|
|
|
|
|
|
|
Close the current file so that the next iteration will read the first line from
|
|
|
|
the next file (if any); lines not read from the file will not count towards the
|
|
|
|
cumulative line count. The filename is not changed until after the first line
|
|
|
|
of the next file has been read. Before the first line has been read, this
|
|
|
|
function has no effect; it cannot be used to skip the first file. After the
|
|
|
|
last line of the last file has been read, this function has no effect.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: close()
|
|
|
|
|
|
|
|
Close the sequence.
|
|
|
|
|
|
|
|
The class which implements the sequence behavior provided by the module is
|
|
|
|
available for subclassing as well:
|
|
|
|
|
|
|
|
|
|
|
|
.. class:: FileInput([files[, inplace[, backup[, mode[, openhook]]]]])
|
|
|
|
|
|
|
|
Class :class:`FileInput` is the implementation; its methods :meth:`filename`,
|
|
|
|
:meth:`fileno`, :meth:`lineno`, :meth:`filelineno`, :meth:`isfirstline`,
|
|
|
|
:meth:`isstdin`, :meth:`nextfile` and :meth:`close` correspond to the functions
|
|
|
|
of the same name in the module. In addition it has a :meth:`readline` method
|
|
|
|
which returns the next input line, and a :meth:`__getitem__` method which
|
|
|
|
implements the sequence behavior. The sequence must be accessed in strictly
|
|
|
|
sequential order; random access and :meth:`readline` cannot be mixed.
|
|
|
|
|
|
|
|
With *mode* you can specify which file mode will be passed to :func:`open`. It
|
|
|
|
must be one of ``'r'``, ``'rU'``, ``'U'`` and ``'rb'``.
|
|
|
|
|
|
|
|
The *openhook*, when given, must be a function that takes two arguments,
|
|
|
|
*filename* and *mode*, and returns an accordingly opened file-like object. You
|
|
|
|
cannot use *inplace* and *openhook* together.
|
|
|
|
|
|
|
|
.. versionchanged:: 2.5
|
|
|
|
Added the *mode* and *openhook* parameters.
|
|
|
|
|
|
|
|
**Optional in-place filtering:** if the keyword argument ``inplace=1`` is passed
|
|
|
|
to :func:`fileinput.input` or to the :class:`FileInput` constructor, the file is
|
|
|
|
moved to a backup file and standard output is directed to the input file (if a
|
|
|
|
file of the same name as the backup file already exists, it will be replaced
|
|
|
|
silently). This makes it possible to write a filter that rewrites its input
|
|
|
|
file in place. If the *backup* parameter is given (typically as
|
|
|
|
``backup='.<some extension>'``), it specifies the extension for the backup file,
|
|
|
|
and the backup file remains around; by default, the extension is ``'.bak'`` and
|
|
|
|
it is deleted when the output file is closed. In-place filtering is disabled
|
|
|
|
when standard input is read.
|
|
|
|
|
Merged revisions 72007-72010,72036-72037 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r72007 | georg.brandl | 2009-04-27 17:09:25 +0200 (Mo, 27 Apr 2009) | 1 line
#5856: fix typo s in traceback example.
........
r72008 | georg.brandl | 2009-04-27 17:10:44 +0200 (Mo, 27 Apr 2009) | 1 line
Remove ".. warning::" markup that doesnt contain warnings for users, rather todo items.
........
r72009 | georg.brandl | 2009-04-27 17:29:09 +0200 (Mo, 27 Apr 2009) | 3 lines
Demote warnings to notices where appropriate, following the goal that as few "red box" warnings
should clutter the docs as possible. Part 1: stuff that gets merged to Py3k.
........
r72010 | georg.brandl | 2009-04-27 17:29:26 +0200 (Mo, 27 Apr 2009) | 2 lines
Demote warnings to notices, part 2: stuff that is 2.x-only.
........
r72036 | georg.brandl | 2009-04-27 19:04:23 +0200 (Mo, 27 Apr 2009) | 1 line
#5848: small unittest doc patch.
........
r72037 | georg.brandl | 2009-04-27 19:09:53 +0200 (Mo, 27 Apr 2009) | 1 line
#5840: dont claim we dont support TLS.
........
2009-04-28 15:23:28 -03:00
|
|
|
.. note::
|
Merged revisions 68133-68134,68141-68142,68145-68146,68148-68149,68159-68162,68166,68171-68174,68179,68195-68196,68210,68214-68215,68217-68222 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r68133 | antoine.pitrou | 2009-01-01 16:38:03 +0100 (Thu, 01 Jan 2009) | 1 line
fill in actual issue number in tests
........
r68134 | hirokazu.yamamoto | 2009-01-01 16:45:39 +0100 (Thu, 01 Jan 2009) | 2 lines
Issue #4797: IOError.filename was not set when _fileio.FileIO failed to open
file with `str' filename on Windows.
........
r68141 | benjamin.peterson | 2009-01-01 17:43:12 +0100 (Thu, 01 Jan 2009) | 1 line
fix highlighting
........
r68142 | benjamin.peterson | 2009-01-01 18:29:49 +0100 (Thu, 01 Jan 2009) | 2 lines
welcome to 2009, Python!
........
r68145 | amaury.forgeotdarc | 2009-01-02 01:03:54 +0100 (Fri, 02 Jan 2009) | 5 lines
#4801 _collections module fails to build on cygwin.
_PyObject_GC_TRACK is the macro version of PyObject_GC_Track,
and according to documentation it should not be used for extension modules.
........
r68146 | ronald.oussoren | 2009-01-02 11:44:46 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue4472: "configure --enable-shared doesn't work on OSX"
........
r68148 | ronald.oussoren | 2009-01-02 11:48:31 +0100 (Fri, 02 Jan 2009) | 2 lines
Forgot to add a NEWS item in my previous checkin
........
r68149 | ronald.oussoren | 2009-01-02 11:50:48 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue4780
........
r68159 | ronald.oussoren | 2009-01-02 15:48:17 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue 1627952
........
r68160 | ronald.oussoren | 2009-01-02 15:52:09 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue r1737832
........
r68161 | ronald.oussoren | 2009-01-02 16:00:05 +0100 (Fri, 02 Jan 2009) | 3 lines
Fix for issue 1149804
........
r68162 | ronald.oussoren | 2009-01-02 16:06:00 +0100 (Fri, 02 Jan 2009) | 3 lines
Fix for issue 4472 is incompatible with Cygwin, this patch
should fix that.
........
r68166 | benjamin.peterson | 2009-01-02 19:26:23 +0100 (Fri, 02 Jan 2009) | 1 line
document PyMemberDef
........
r68171 | georg.brandl | 2009-01-02 21:25:14 +0100 (Fri, 02 Jan 2009) | 3 lines
#4811: fix markup glitches (mostly remains of the conversion),
found by Gabriel Genellina.
........
r68172 | martin.v.loewis | 2009-01-02 21:32:55 +0100 (Fri, 02 Jan 2009) | 2 lines
Issue #4075: Use OutputDebugStringW in Py_FatalError.
........
r68173 | martin.v.loewis | 2009-01-02 21:40:14 +0100 (Fri, 02 Jan 2009) | 2 lines
Issue #4051: Prevent conflict of UNICODE macros in cPickle.
........
r68174 | benjamin.peterson | 2009-01-02 21:47:27 +0100 (Fri, 02 Jan 2009) | 1 line
fix compilation on non-Windows platforms
........
r68179 | raymond.hettinger | 2009-01-02 22:26:45 +0100 (Fri, 02 Jan 2009) | 1 line
Issue #4615. Document how to use itertools for de-duping.
........
r68195 | georg.brandl | 2009-01-03 14:45:15 +0100 (Sat, 03 Jan 2009) | 2 lines
Remove useless string literal.
........
r68196 | georg.brandl | 2009-01-03 15:29:53 +0100 (Sat, 03 Jan 2009) | 2 lines
Fix indentation.
........
r68210 | georg.brandl | 2009-01-03 20:10:12 +0100 (Sat, 03 Jan 2009) | 2 lines
Set eol-style correctly for mp_distributing.py.
........
r68214 | georg.brandl | 2009-01-03 20:44:48 +0100 (Sat, 03 Jan 2009) | 2 lines
Make indentation consistent.
........
r68215 | georg.brandl | 2009-01-03 21:15:14 +0100 (Sat, 03 Jan 2009) | 2 lines
Fix role name.
........
r68217 | georg.brandl | 2009-01-03 21:30:15 +0100 (Sat, 03 Jan 2009) | 2 lines
Add rstlint, a little tool to find subtle markup problems and inconsistencies in the Doc sources.
........
r68218 | georg.brandl | 2009-01-03 21:38:59 +0100 (Sat, 03 Jan 2009) | 2 lines
Recognize usage of the default role.
........
r68219 | georg.brandl | 2009-01-03 21:47:01 +0100 (Sat, 03 Jan 2009) | 2 lines
Fix uses of the default role.
........
r68220 | georg.brandl | 2009-01-03 21:55:06 +0100 (Sat, 03 Jan 2009) | 2 lines
Remove trailing whitespace.
........
r68221 | georg.brandl | 2009-01-03 22:04:55 +0100 (Sat, 03 Jan 2009) | 2 lines
Remove tabs from the documentation.
........
r68222 | georg.brandl | 2009-01-03 22:11:58 +0100 (Sat, 03 Jan 2009) | 2 lines
Disable the line length checker by default.
........
2009-01-03 17:55:17 -04:00
|
|
|
|
2007-08-15 16:06:04 -03:00
|
|
|
The current implementation does not work for MS-DOS 8+3 filesystems.
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
|
2007-08-15 16:06:04 -03:00
|
|
|
The two following opening hooks are provided by this module:
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
.. function:: hook_compressed(filename, mode)
|
|
|
|
|
|
|
|
Transparently opens files compressed with gzip and bzip2 (recognized by the
|
|
|
|
extensions ``'.gz'`` and ``'.bz2'``) using the :mod:`gzip` and :mod:`bz2`
|
|
|
|
modules. If the filename extension is not ``'.gz'`` or ``'.bz2'``, the file is
|
|
|
|
opened normally (ie, using :func:`open` without any decompression).
|
|
|
|
|
|
|
|
Usage example: ``fi = fileinput.FileInput(openhook=fileinput.hook_compressed)``
|
|
|
|
|
|
|
|
.. versionadded:: 2.5
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: hook_encoded(encoding)
|
|
|
|
|
|
|
|
Returns a hook which opens each file with :func:`codecs.open`, using the given
|
|
|
|
*encoding* to read the file.
|
|
|
|
|
|
|
|
Usage example: ``fi =
|
|
|
|
fileinput.FileInput(openhook=fileinput.hook_encoded("iso-8859-1"))``
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
With this hook, :class:`FileInput` might return Unicode strings depending on the
|
|
|
|
specified *encoding*.
|
|
|
|
|
|
|
|
.. versionadded:: 2.5
|
|
|
|
|