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