17db96d56Sopenharmony_ci:mod:`fileinput` --- Iterate over lines from multiple input streams
27db96d56Sopenharmony_ci===================================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: fileinput
57db96d56Sopenharmony_ci   :synopsis: Loop over standard input or a list of files.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci.. moduleauthor:: Guido van Rossum <guido@python.org>
87db96d56Sopenharmony_ci.. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci**Source code:** :source:`Lib/fileinput.py`
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci--------------
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ciThis module implements a helper class and functions to quickly write a
157db96d56Sopenharmony_ciloop over standard input or a list of files. If you just want to read or
167db96d56Sopenharmony_ciwrite one file see :func:`open`.
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ciThe typical use is::
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ci   import fileinput
217db96d56Sopenharmony_ci   for line in fileinput.input(encoding="utf-8"):
227db96d56Sopenharmony_ci       process(line)
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ciThis iterates over the lines of all files listed in ``sys.argv[1:]``, defaulting
257db96d56Sopenharmony_cito ``sys.stdin`` if the list is empty.  If a filename is ``'-'``, it is also
267db96d56Sopenharmony_cireplaced by ``sys.stdin`` and the optional arguments *mode* and *openhook*
277db96d56Sopenharmony_ciare ignored.  To specify an alternative list of filenames, pass it as the
287db96d56Sopenharmony_cifirst argument to :func:`.input`.  A single file name is also allowed.
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ciAll files are opened in text mode by default, but you can override this by
317db96d56Sopenharmony_cispecifying the *mode* parameter in the call to :func:`.input` or
327db96d56Sopenharmony_ci:class:`FileInput`.  If an I/O error occurs during opening or reading a file,
337db96d56Sopenharmony_ci:exc:`OSError` is raised.
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci.. versionchanged:: 3.3
367db96d56Sopenharmony_ci   :exc:`IOError` used to be raised; it is now an alias of :exc:`OSError`.
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ciIf ``sys.stdin`` is used more than once, the second and further use will return
397db96d56Sopenharmony_cino lines, except perhaps for interactive use, or if it has been explicitly reset
407db96d56Sopenharmony_ci(e.g. using ``sys.stdin.seek(0)``).
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ciEmpty files are opened and immediately closed; the only time their presence in
437db96d56Sopenharmony_cithe list of filenames is noticeable at all is when the last file opened is
447db96d56Sopenharmony_ciempty.
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ciLines are returned with any newlines intact, which means that the last line in
477db96d56Sopenharmony_cia file may not have one.
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ciYou can control how files are opened by providing an opening hook via the
507db96d56Sopenharmony_ci*openhook* parameter to :func:`fileinput.input` or :class:`FileInput()`. The
517db96d56Sopenharmony_cihook must be a function that takes two arguments, *filename* and *mode*, and
527db96d56Sopenharmony_cireturns an accordingly opened file-like object. If *encoding* and/or *errors*
537db96d56Sopenharmony_ciare specified, they will be passed to the hook as additional keyword arguments.
547db96d56Sopenharmony_ciThis module provides a :func:`hook_compressed` to support compressed files.
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ciThe following function is the primary interface of this module:
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci.. function:: input(files=None, inplace=False, backup='', *, mode='r', openhook=None, encoding=None, errors=None)
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ci   Create an instance of the :class:`FileInput` class.  The instance will be used
627db96d56Sopenharmony_ci   as global state for the functions of this module, and is also returned to use
637db96d56Sopenharmony_ci   during iteration.  The parameters to this function will be passed along to the
647db96d56Sopenharmony_ci   constructor of the :class:`FileInput` class.
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci   The :class:`FileInput` instance can be used as a context manager in the
677db96d56Sopenharmony_ci   :keyword:`with` statement.  In this example, *input* is closed after the
687db96d56Sopenharmony_ci   :keyword:`!with` statement is exited, even if an exception occurs::
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci      with fileinput.input(files=('spam.txt', 'eggs.txt'), encoding="utf-8") as f:
717db96d56Sopenharmony_ci          for line in f:
727db96d56Sopenharmony_ci              process(line)
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci   .. versionchanged:: 3.2
757db96d56Sopenharmony_ci      Can be used as a context manager.
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci   .. versionchanged:: 3.8
787db96d56Sopenharmony_ci      The keyword parameters *mode* and *openhook* are now keyword-only.
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci   .. versionchanged:: 3.10
817db96d56Sopenharmony_ci      The keyword-only parameter *encoding* and *errors* are added.
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ciThe following functions use the global state created by :func:`fileinput.input`;
857db96d56Sopenharmony_ciif there is no active state, :exc:`RuntimeError` is raised.
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci
887db96d56Sopenharmony_ci.. function:: filename()
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci   Return the name of the file currently being read.  Before the first line has
917db96d56Sopenharmony_ci   been read, returns ``None``.
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci
947db96d56Sopenharmony_ci.. function:: fileno()
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ci   Return the integer "file descriptor" for the current file. When no file is
977db96d56Sopenharmony_ci   opened (before the first line and between files), returns ``-1``.
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci.. function:: lineno()
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci   Return the cumulative line number of the line that has just been read.  Before
1037db96d56Sopenharmony_ci   the first line has been read, returns ``0``.  After the last line of the last
1047db96d56Sopenharmony_ci   file has been read, returns the line number of that line.
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci.. function:: filelineno()
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci   Return the line number in the current file.  Before the first line has been
1107db96d56Sopenharmony_ci   read, returns ``0``.  After the last line of the last file has been read,
1117db96d56Sopenharmony_ci   returns the line number of that line within the file.
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci.. function:: isfirstline()
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_ci   Return ``True`` if the line just read is the first line of its file, otherwise
1177db96d56Sopenharmony_ci   return ``False``.
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ci.. function:: isstdin()
1217db96d56Sopenharmony_ci
1227db96d56Sopenharmony_ci   Return ``True`` if the last line was read from ``sys.stdin``, otherwise return
1237db96d56Sopenharmony_ci   ``False``.
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci.. function:: nextfile()
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci   Close the current file so that the next iteration will read the first line from
1297db96d56Sopenharmony_ci   the next file (if any); lines not read from the file will not count towards the
1307db96d56Sopenharmony_ci   cumulative line count.  The filename is not changed until after the first line
1317db96d56Sopenharmony_ci   of the next file has been read.  Before the first line has been read, this
1327db96d56Sopenharmony_ci   function has no effect; it cannot be used to skip the first file.  After the
1337db96d56Sopenharmony_ci   last line of the last file has been read, this function has no effect.
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci
1367db96d56Sopenharmony_ci.. function:: close()
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci   Close the sequence.
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ciThe class which implements the sequence behavior provided by the module is
1417db96d56Sopenharmony_ciavailable for subclassing as well:
1427db96d56Sopenharmony_ci
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ci.. class:: FileInput(files=None, inplace=False, backup='', *, mode='r', openhook=None, encoding=None, errors=None)
1457db96d56Sopenharmony_ci
1467db96d56Sopenharmony_ci   Class :class:`FileInput` is the implementation; its methods :meth:`filename`,
1477db96d56Sopenharmony_ci   :meth:`fileno`, :meth:`lineno`, :meth:`filelineno`, :meth:`isfirstline`,
1487db96d56Sopenharmony_ci   :meth:`isstdin`, :meth:`nextfile` and :meth:`close` correspond to the
1497db96d56Sopenharmony_ci   functions of the same name in the module. In addition it is :term:`iterable`
1507db96d56Sopenharmony_ci   and has a :meth:`~io.TextIOBase.readline` method which returns the next
1517db96d56Sopenharmony_ci   input line. The sequence must be accessed in strictly sequential order;
1527db96d56Sopenharmony_ci   random access and :meth:`~io.TextIOBase.readline` cannot be mixed.
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci   With *mode* you can specify which file mode will be passed to :func:`open`. It
1557db96d56Sopenharmony_ci   must be one of ``'r'`` and ``'rb'``.
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_ci   The *openhook*, when given, must be a function that takes two arguments,
1587db96d56Sopenharmony_ci   *filename* and *mode*, and returns an accordingly opened file-like object. You
1597db96d56Sopenharmony_ci   cannot use *inplace* and *openhook* together.
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ci   You can specify *encoding* and *errors* that is passed to :func:`open` or *openhook*.
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci   A :class:`FileInput` instance can be used as a context manager in the
1647db96d56Sopenharmony_ci   :keyword:`with` statement.  In this example, *input* is closed after the
1657db96d56Sopenharmony_ci   :keyword:`!with` statement is exited, even if an exception occurs::
1667db96d56Sopenharmony_ci
1677db96d56Sopenharmony_ci      with FileInput(files=('spam.txt', 'eggs.txt')) as input:
1687db96d56Sopenharmony_ci          process(input)
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ci   .. versionchanged:: 3.2
1717db96d56Sopenharmony_ci      Can be used as a context manager.
1727db96d56Sopenharmony_ci
1737db96d56Sopenharmony_ci   .. versionchanged:: 3.8
1747db96d56Sopenharmony_ci      The keyword parameter *mode* and *openhook* are now keyword-only.
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ci   .. versionchanged:: 3.10
1777db96d56Sopenharmony_ci      The keyword-only parameter *encoding* and *errors* are added.
1787db96d56Sopenharmony_ci
1797db96d56Sopenharmony_ci   .. versionchanged:: 3.11
1807db96d56Sopenharmony_ci      The ``'rU'`` and ``'U'`` modes and the :meth:`__getitem__` method have
1817db96d56Sopenharmony_ci      been removed.
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci**Optional in-place filtering:** if the keyword argument ``inplace=True`` is
1857db96d56Sopenharmony_cipassed to :func:`fileinput.input` or to the :class:`FileInput` constructor, the
1867db96d56Sopenharmony_cifile is moved to a backup file and standard output is directed to the input file
1877db96d56Sopenharmony_ci(if a file of the same name as the backup file already exists, it will be
1887db96d56Sopenharmony_cireplaced silently).  This makes it possible to write a filter that rewrites its
1897db96d56Sopenharmony_ciinput file in place.  If the *backup* parameter is given (typically as
1907db96d56Sopenharmony_ci``backup='.<some extension>'``), it specifies the extension for the backup file,
1917db96d56Sopenharmony_ciand the backup file remains around; by default, the extension is ``'.bak'`` and
1927db96d56Sopenharmony_ciit is deleted when the output file is closed.  In-place filtering is disabled
1937db96d56Sopenharmony_ciwhen standard input is read.
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ci
1967db96d56Sopenharmony_ciThe two following opening hooks are provided by this module:
1977db96d56Sopenharmony_ci
1987db96d56Sopenharmony_ci.. function:: hook_compressed(filename, mode, *, encoding=None, errors=None)
1997db96d56Sopenharmony_ci
2007db96d56Sopenharmony_ci   Transparently opens files compressed with gzip and bzip2 (recognized by the
2017db96d56Sopenharmony_ci   extensions ``'.gz'`` and ``'.bz2'``) using the :mod:`gzip` and :mod:`bz2`
2027db96d56Sopenharmony_ci   modules.  If the filename extension is not ``'.gz'`` or ``'.bz2'``, the file is
2037db96d56Sopenharmony_ci   opened normally (ie, using :func:`open` without any decompression).
2047db96d56Sopenharmony_ci
2057db96d56Sopenharmony_ci   The *encoding* and *errors* values are passed to :class:`io.TextIOWrapper`
2067db96d56Sopenharmony_ci   for compressed files and open for normal files.
2077db96d56Sopenharmony_ci
2087db96d56Sopenharmony_ci   Usage example:  ``fi = fileinput.FileInput(openhook=fileinput.hook_compressed, encoding="utf-8")``
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ci   .. versionchanged:: 3.10
2117db96d56Sopenharmony_ci      The keyword-only parameter *encoding* and *errors* are added.
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_ci
2147db96d56Sopenharmony_ci.. function:: hook_encoded(encoding, errors=None)
2157db96d56Sopenharmony_ci
2167db96d56Sopenharmony_ci   Returns a hook which opens each file with :func:`open`, using the given
2177db96d56Sopenharmony_ci   *encoding* and *errors* to read the file.
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci   Usage example: ``fi =
2207db96d56Sopenharmony_ci   fileinput.FileInput(openhook=fileinput.hook_encoded("utf-8",
2217db96d56Sopenharmony_ci   "surrogateescape"))``
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ci   .. versionchanged:: 3.6
2247db96d56Sopenharmony_ci      Added the optional *errors* parameter.
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ci   .. deprecated:: 3.10
2277db96d56Sopenharmony_ci      This function is deprecated since :func:`fileinput.input` and :class:`FileInput`
2287db96d56Sopenharmony_ci      now have *encoding* and *errors* parameters.
229