Files
hustoj/web/python-docs/library/fileinput.html
2025-03-09 17:10:56 +08:00

385 lines
33 KiB
HTML

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh_CN">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>fileinput --- 迭代来自多个输入流的行 &#8212; Python 3.8.20 文档</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<script src="../_static/translations.js"></script>
<script src="../_static/sidebar.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
title="在 Python 3.8.20 文档 中搜索"
href="../_static/opensearch.xml"/>
<link rel="author" title="关于这些文档" href="../about.html" />
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="copyright" title="版权所有" href="../copyright.html" />
<link rel="next" title="stat --- 解析 stat() 结果" href="stat.html" />
<link rel="prev" title="os.path --- 常用路径操作" href="os.path.html" />
<link rel="canonical" href="https://docs.python.org/3/library/fileinput.html" />
<style>
@media only screen {
table.full-width-table {
width: 100%;
}
}
</style>
<link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
<script type="text/javascript" src="../_static/copybutton.js"></script>
<script type="text/javascript" src="../_static/menu.js"></script>
</head>
<body>
<div class="mobile-nav">
<input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
<label for="menuToggler" class="toggler__label">
<span></span>
</label>
<nav class="nav-content" role="navigation">
<a href="https://www.python.org/" class="nav-logo">
<img src="../_static/py.svg" alt="Logo"/>
</a>
<div class="version_switcher_placeholder"></div>
<form role="search" class="search" action="../search.html" method="get">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
<path fill-rule="nonzero"
d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" fill="#444"></path>
</svg>
<input type="text" name="q" aria-label="快速搜索"/>
<input type="submit" value="转向"/>
</form>
</nav>
<div class="menu-wrapper">
<nav class="menu" role="navigation" aria-label="main navigation">
<div class="language_switcher_placeholder"></div>
<h4>上一个主题</h4>
<p class="topless"><a href="os.path.html"
title="上一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">os.path</span></code> --- 常用路径操作</a></p>
<h4>下一个主题</h4>
<p class="topless"><a href="stat.html"
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">stat</span></code> --- 解析 <code class="xref py py-func docutils literal notranslate"><span class="pre">stat()</span></code> 结果</a></p>
<div role="note" aria-label="source link">
<h3>本页</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">报告 Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/fileinput.rst"
rel="nofollow">显示源代码
</a>
</li>
</ul>
</div>
</nav>
</div>
</div>
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
这个文档所针对的是一个已不再受支持的 Python 旧版本。
你应当升级版本,并阅读
<a href="/3/library/fileinput.html"> Python 当前稳定版本的文档</a>.
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>导航</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="总目录"
accesskey="I">索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python 模块索引"
>模块</a> |</li>
<li class="right" >
<a href="stat.html" title="stat --- 解析 stat() 结果"
accesskey="N">下一页</a> |</li>
<li class="right" >
<a href="os.path.html" title="os.path --- 常用路径操作"
accesskey="P">上一页</a> |</li>
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.8.20 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="filesys.html" accesskey="U">文件和目录访问</a> &#187;</li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
<input type="submit" value="转向" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
|
</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-fileinput">
<span id="fileinput-iterate-over-lines-from-multiple-input-streams"></span><h1><a class="reference internal" href="#module-fileinput" title="fileinput: Loop over standard input or a list of files."><code class="xref py py-mod docutils literal notranslate"><span class="pre">fileinput</span></code></a> --- 迭代来自多个输入流的行<a class="headerlink" href="#module-fileinput" title="永久链接至标题"></a></h1>
<p><strong>源代码:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.8/Lib/fileinput.py">Lib/fileinput.py</a></p>
<hr class="docutils" />
<p>此模块实现了一个辅助类和一些函数用来快速编写访问标准输入或文件列表的循环。 如果你只想要读写一个文件请参阅 <a class="reference internal" href="functions.html#open" title="open"><code class="xref py py-func docutils literal notranslate"><span class="pre">open()</span></code></a></p>
<p>典型用法为:</p>
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">fileinput</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">fileinput</span><span class="o">.</span><span class="n">input</span><span class="p">():</span>
<span class="n">process</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
</pre></div>
</div>
<p>此程序会迭代 <code class="docutils literal notranslate"><span class="pre">sys.argv[1:]</span></code> 中列出的所有文件内的行,如果列表为空则会使用 <code class="docutils literal notranslate"><span class="pre">sys.stdin</span></code>。 如果有一个文件名为 <code class="docutils literal notranslate"><span class="pre">'-'</span></code>,它也会被替换为 <code class="docutils literal notranslate"><span class="pre">sys.stdin</span></code> 并且可选参数 <em>mode</em><em>openhook</em> 会被忽略。 要指定替代文件列表,请将其作为第一个参数传给 <a class="reference internal" href="#fileinput.input" title="fileinput.input"><code class="xref py py-func docutils literal notranslate"><span class="pre">input()</span></code></a>。 也允许使用单个文件。</p>
<p>所有文件都默认以文本模式打开,但你可以通过在调用 <a class="reference internal" href="#fileinput.input" title="fileinput.input"><code class="xref py py-func docutils literal notranslate"><span class="pre">input()</span></code></a><a class="reference internal" href="#fileinput.FileInput" title="fileinput.FileInput"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileInput</span></code></a> 时指定 <em>mode</em> 形参来覆盖此行为。 如果在打开或读取文件时发生了 I/O 错误,将会引发 <a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">OSError</span></code></a></p>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.3 版更改: </span>原来会引发 <a class="reference internal" href="exceptions.html#IOError" title="IOError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">IOError</span></code></a>;现在它是 <a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">OSError</span></code></a> 的别名。</p>
</div>
<p>如果 <code class="docutils literal notranslate"><span class="pre">sys.stdin</span></code> 被使用超过一次,则第二次之后的使用将不返回任何行,除非是被交互式的使用,或都是被显式地重置 (例如使用 <code class="docutils literal notranslate"><span class="pre">sys.stdin.seek(0)</span></code>)。</p>
<p>空文件打开后将立即被关闭;它们在文件列表中会被注意到的唯一情况只有当最后打开的文件为空的时候。</p>
<p>反回的行不会对换行符做任何处理,这意味着文件中的最后一行可能不带换行符。</p>
<p>想要控制文件的打开方式,你可以通过将 <em>openhook</em> 形参传给 <a class="reference internal" href="#fileinput.input" title="fileinput.input"><code class="xref py py-func docutils literal notranslate"><span class="pre">fileinput.input()</span></code></a><a class="reference internal" href="#fileinput.FileInput" title="fileinput.FileInput"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileInput()</span></code></a> 来提供一个打开钩子。 此钩子必须为一个函数,它接受两个参数,<em>filename</em><em>mode</em>,并返回一个以相应模式打开的文件类对象。 此模块已经提供了两个有用的钩子。</p>
<p>以下函数是此模块的初始接口:</p>
<dl class="function">
<dt id="fileinput.input">
<code class="sig-prename descclassname">fileinput.</code><code class="sig-name descname">input</code><span class="sig-paren">(</span><em class="sig-param">files=None</em>, <em class="sig-param">inplace=False</em>, <em class="sig-param">backup=''</em>, <em class="sig-param">*</em>, <em class="sig-param">mode='r'</em>, <em class="sig-param">openhook=None</em><span class="sig-paren">)</span><a class="headerlink" href="#fileinput.input" title="永久链接至目标"></a></dt>
<dd><p>创建一个 <a class="reference internal" href="#fileinput.FileInput" title="fileinput.FileInput"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileInput</span></code></a> 类的实例。 该实例将被用作此模块中函数的全局状态,并且还将在迭代期间被返回使用。 此函数的形参将被继续传递给 <a class="reference internal" href="#fileinput.FileInput" title="fileinput.FileInput"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileInput</span></code></a> 类的构造器。</p>
<p><a class="reference internal" href="#fileinput.FileInput" title="fileinput.FileInput"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileInput</span></code></a> 实例可以在 <a class="reference internal" href="../reference/compound_stmts.html#with"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">with</span></code></a> 语句中被用作上下文管理器。 在这个例子中,<em>input</em><code class="xref std std-keyword docutils literal notranslate"><span class="pre">with</span></code> 语句结束后将会被关闭,即使发生了异常也是如此:</p>
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">with</span> <span class="n">fileinput</span><span class="o">.</span><span class="n">input</span><span class="p">(</span><span class="n">files</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;spam.txt&#39;</span><span class="p">,</span> <span class="s1">&#39;eggs.txt&#39;</span><span class="p">))</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span>
<span class="n">process</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
</pre></div>
</div>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.2 版更改: </span>可以被用作上下文管理器。</p>
</div>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.8 版更改: </span>关键字形参 <em>mode</em><em>openhook</em> 现在是仅限关键字形参。</p>
</div>
</dd></dl>
<p>下列函数会使用 <a class="reference internal" href="#fileinput.input" title="fileinput.input"><code class="xref py py-func docutils literal notranslate"><span class="pre">fileinput.input()</span></code></a> 所创建的全局状态;如果没有活动的状态,则会引发 <a class="reference internal" href="exceptions.html#RuntimeError" title="RuntimeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">RuntimeError</span></code></a></p>
<dl class="function">
<dt id="fileinput.filename">
<code class="sig-prename descclassname">fileinput.</code><code class="sig-name descname">filename</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#fileinput.filename" title="永久链接至目标"></a></dt>
<dd><p>返回当前被读取的文件名。 在第一行被读取之前,返回 <code class="docutils literal notranslate"><span class="pre">None</span></code></p>
</dd></dl>
<dl class="function">
<dt id="fileinput.fileno">
<code class="sig-prename descclassname">fileinput.</code><code class="sig-name descname">fileno</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#fileinput.fileno" title="永久链接至目标"></a></dt>
<dd><p>返回以整数表示的当前文件“文件描述符”。 当未打开文件时(处在第一行和文件之间),返回 <code class="docutils literal notranslate"><span class="pre">-1</span></code></p>
</dd></dl>
<dl class="function">
<dt id="fileinput.lineno">
<code class="sig-prename descclassname">fileinput.</code><code class="sig-name descname">lineno</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#fileinput.lineno" title="永久链接至目标"></a></dt>
<dd><p>返回已被读取的累计行号。 在第一行被读取之前,返回 <code class="docutils literal notranslate"><span class="pre">0</span></code>。 在最后一个文件的最后一行被读取之后,返回该行的行号。</p>
</dd></dl>
<dl class="function">
<dt id="fileinput.filelineno">
<code class="sig-prename descclassname">fileinput.</code><code class="sig-name descname">filelineno</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#fileinput.filelineno" title="永久链接至目标"></a></dt>
<dd><p>返回当前文件中的行号。 在第一行被读取之前,返回 <code class="docutils literal notranslate"><span class="pre">0</span></code>。 在最后一个文件的最后一行被读取之后,返回此文件中该行的行号。</p>
</dd></dl>
<dl class="function">
<dt id="fileinput.isfirstline">
<code class="sig-prename descclassname">fileinput.</code><code class="sig-name descname">isfirstline</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#fileinput.isfirstline" title="永久链接至目标"></a></dt>
<dd><p>如果刚读取的行是其所在文件的第一行则返回 <code class="docutils literal notranslate"><span class="pre">True</span></code>,否则返回 <code class="docutils literal notranslate"><span class="pre">False</span></code></p>
</dd></dl>
<dl class="function">
<dt id="fileinput.isstdin">
<code class="sig-prename descclassname">fileinput.</code><code class="sig-name descname">isstdin</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#fileinput.isstdin" title="永久链接至目标"></a></dt>
<dd><p>如果最后读取的行来自 <code class="docutils literal notranslate"><span class="pre">sys.stdin</span></code> 则返回 <code class="docutils literal notranslate"><span class="pre">True</span></code>,否则返回 <code class="docutils literal notranslate"><span class="pre">False</span></code></p>
</dd></dl>
<dl class="function">
<dt id="fileinput.nextfile">
<code class="sig-prename descclassname">fileinput.</code><code class="sig-name descname">nextfile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#fileinput.nextfile" title="永久链接至目标"></a></dt>
<dd><p>关闭当前文件以使下次迭代将从下一个文件(如果存在)读取第一行;不是从该文件读取的行将不会被计入累计行数。 直到下一个文件的第一行被读取之后文件名才会改变。 在第一行被读取之前,此函数将不会生效;它不能被用来跳过第一个文件。 在最后一个文件的最后一行被读取之后,此函数将不再生效。</p>
</dd></dl>
<dl class="function">
<dt id="fileinput.close">
<code class="sig-prename descclassname">fileinput.</code><code class="sig-name descname">close</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#fileinput.close" title="永久链接至目标"></a></dt>
<dd><p>关闭序列。</p>
</dd></dl>
<p>此模块所提供的实现了序列行为的类同样也可用于子类化:</p>
<dl class="class">
<dt id="fileinput.FileInput">
<em class="property">class </em><code class="sig-prename descclassname">fileinput.</code><code class="sig-name descname">FileInput</code><span class="sig-paren">(</span><em class="sig-param">files=None</em>, <em class="sig-param">inplace=False</em>, <em class="sig-param">backup=''</em>, <em class="sig-param">*</em>, <em class="sig-param">mode='r'</em>, <em class="sig-param">openhook=None</em><span class="sig-paren">)</span><a class="headerlink" href="#fileinput.FileInput" title="永久链接至目标"></a></dt>
<dd><p><a class="reference internal" href="#fileinput.FileInput" title="fileinput.FileInput"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileInput</span></code></a> 是一个实现;它的方法 <a class="reference internal" href="#fileinput.filename" title="fileinput.filename"><code class="xref py py-meth docutils literal notranslate"><span class="pre">filename()</span></code></a>, <a class="reference internal" href="#fileinput.fileno" title="fileinput.fileno"><code class="xref py py-meth docutils literal notranslate"><span class="pre">fileno()</span></code></a>, <a class="reference internal" href="#fileinput.lineno" title="fileinput.lineno"><code class="xref py py-meth docutils literal notranslate"><span class="pre">lineno()</span></code></a>, <a class="reference internal" href="#fileinput.filelineno" title="fileinput.filelineno"><code class="xref py py-meth docutils literal notranslate"><span class="pre">filelineno()</span></code></a>, <a class="reference internal" href="#fileinput.isfirstline" title="fileinput.isfirstline"><code class="xref py py-meth docutils literal notranslate"><span class="pre">isfirstline()</span></code></a>, <a class="reference internal" href="#fileinput.isstdin" title="fileinput.isstdin"><code class="xref py py-meth docutils literal notranslate"><span class="pre">isstdin()</span></code></a>, <a class="reference internal" href="#fileinput.nextfile" title="fileinput.nextfile"><code class="xref py py-meth docutils literal notranslate"><span class="pre">nextfile()</span></code></a><a class="reference internal" href="#fileinput.close" title="fileinput.close"><code class="xref py py-meth docutils literal notranslate"><span class="pre">close()</span></code></a> 对应于此模块中具有相同名称的函数。 此外它还有一个 <a class="reference internal" href="io.html#io.TextIOBase.readline" title="io.TextIOBase.readline"><code class="xref py py-meth docutils literal notranslate"><span class="pre">readline()</span></code></a> 方法可返回下一个输入行,以及一个 <a class="reference internal" href="../reference/datamodel.html#object.__getitem__" title="object.__getitem__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__getitem__()</span></code></a> 方法,该方法实现了序列行为。 这种序列必须以严格的序列顺序来读写;随机读写和 <a class="reference internal" href="io.html#io.TextIOBase.readline" title="io.TextIOBase.readline"><code class="xref py py-meth docutils literal notranslate"><span class="pre">readline()</span></code></a> 不可以被混用。</p>
<p>通过 <em>mode</em> 你可以指定要传给 <a class="reference internal" href="functions.html#open" title="open"><code class="xref py py-func docutils literal notranslate"><span class="pre">open()</span></code></a> 的文件模式。 它必须为 <code class="docutils literal notranslate"><span class="pre">'r'</span></code>, <code class="docutils literal notranslate"><span class="pre">'rU'</span></code>, <code class="docutils literal notranslate"><span class="pre">'U'</span></code><code class="docutils literal notranslate"><span class="pre">'rb'</span></code> 中的一个。</p>
<p><em>openhook</em> 如果给出则必须为一个函数,它接受两个参数 <em>filename</em><em>mode</em>,并相应地返回一个打开的文件型对象。 你不能同时使用 <em>inplace</em><em>openhook</em></p>
<p><a class="reference internal" href="#fileinput.FileInput" title="fileinput.FileInput"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileInput</span></code></a> 实例可以在 <a class="reference internal" href="../reference/compound_stmts.html#with"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">with</span></code></a> 语句中被用作上下文管理器。 在这个例子中,<em>input</em><code class="xref std std-keyword docutils literal notranslate"><span class="pre">with</span></code> 语句结束后将会被关闭,即使发生了异常也是如此:</p>
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">with</span> <span class="n">FileInput</span><span class="p">(</span><span class="n">files</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;spam.txt&#39;</span><span class="p">,</span> <span class="s1">&#39;eggs.txt&#39;</span><span class="p">))</span> <span class="k">as</span> <span class="nb">input</span><span class="p">:</span>
<span class="n">process</span><span class="p">(</span><span class="nb">input</span><span class="p">)</span>
</pre></div>
</div>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.2 版更改: </span>可以被用作上下文管理器。</p>
</div>
<div class="deprecated">
<p><span class="versionmodified deprecated">3.4 版后已移除: </span><code class="docutils literal notranslate"><span class="pre">'rU'</span></code><code class="docutils literal notranslate"><span class="pre">'U'</span></code> 模式。</p>
</div>
<div class="deprecated">
<p><span class="versionmodified deprecated">3.8 版后已移除: </span><a class="reference internal" href="../reference/datamodel.html#object.__getitem__" title="object.__getitem__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__getitem__()</span></code></a> 方法的支持已弃用。</p>
</div>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.8 版更改: </span>关键字形参 <em>mode</em><em>openhook</em> 现在是仅限关键字形参。</p>
</div>
</dd></dl>
<p><strong>可选的原地过滤:</strong> 如果传递了关键字参数 <code class="docutils literal notranslate"><span class="pre">inplace=True</span></code><a class="reference internal" href="#fileinput.input" title="fileinput.input"><code class="xref py py-func docutils literal notranslate"><span class="pre">fileinput.input()</span></code></a><a class="reference internal" href="#fileinput.FileInput" title="fileinput.FileInput"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileInput</span></code></a> 构造器,则文件会被移至备份文件并将标准输出定向到输入文件(如果已存在与备份文件同名的文件,它将被静默地替换)。 这使得编写一个能够原地重写其输入文件的过滤器成为可能。 如果给出了 <em>backup</em> 形参 (通常形式为 <code class="docutils literal notranslate"><span class="pre">backup='.&lt;some</span> <span class="pre">extension&gt;'</span></code>),它将指定备份文件的扩展名,并且备份文件会被保留;默认情况下扩展名为 <code class="docutils literal notranslate"><span class="pre">'.bak'</span></code> 并且它会在输出文件关闭时被删除。 在读取标准输入时原地过滤会被禁用。</p>
<p>此模块提供了以下两种打开文件钩子:</p>
<dl class="function">
<dt id="fileinput.hook_compressed">
<code class="sig-prename descclassname">fileinput.</code><code class="sig-name descname">hook_compressed</code><span class="sig-paren">(</span><em class="sig-param">filename</em>, <em class="sig-param">mode</em><span class="sig-paren">)</span><a class="headerlink" href="#fileinput.hook_compressed" title="永久链接至目标"></a></dt>
<dd><p>使用 <a class="reference internal" href="gzip.html#module-gzip" title="gzip: Interfaces for gzip compression and decompression using file objects."><code class="xref py py-mod docutils literal notranslate"><span class="pre">gzip</span></code></a><a class="reference internal" href="bz2.html#module-bz2" title="bz2: Interfaces for bzip2 compression and decompression."><code class="xref py py-mod docutils literal notranslate"><span class="pre">bz2</span></code></a> 模块透明地打开 gzip 和 bzip2 压缩的文件(通过扩展名 <code class="docutils literal notranslate"><span class="pre">'.gz'</span></code><code class="docutils literal notranslate"><span class="pre">'.bz2'</span></code> 来识别)。 如果文件扩展名不是 <code class="docutils literal notranslate"><span class="pre">'.gz'</span></code><code class="docutils literal notranslate"><span class="pre">'.bz2'</span></code>,文件会以正常方式打开(即使用 <a class="reference internal" href="functions.html#open" title="open"><code class="xref py py-func docutils literal notranslate"><span class="pre">open()</span></code></a> 并且不带任何解压操作)。</p>
<p>使用示例: <code class="docutils literal notranslate"><span class="pre">fi</span> <span class="pre">=</span> <span class="pre">fileinput.FileInput(openhook=fileinput.hook_compressed)</span></code></p>
</dd></dl>
<dl class="function">
<dt id="fileinput.hook_encoded">
<code class="sig-prename descclassname">fileinput.</code><code class="sig-name descname">hook_encoded</code><span class="sig-paren">(</span><em class="sig-param">encoding</em>, <em class="sig-param">errors=None</em><span class="sig-paren">)</span><a class="headerlink" href="#fileinput.hook_encoded" title="永久链接至目标"></a></dt>
<dd><p>返回一个通过 <a class="reference internal" href="functions.html#open" title="open"><code class="xref py py-func docutils literal notranslate"><span class="pre">open()</span></code></a> 打开每个文件的钩子,使用给定的 <em>encoding</em><em>errors</em> 来读取文件。</p>
<p>使用示例: <code class="docutils literal notranslate"><span class="pre">fi</span> <span class="pre">=</span> <span class="pre">fileinput.FileInput(openhook=fileinput.hook_encoded(&quot;utf-8&quot;,</span> <span class="pre">&quot;surrogateescape&quot;))</span></code></p>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.6 版更改: </span>添加了可选的 <em>errors</em> 形参。</p>
</div>
</dd></dl>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h4>上一个主题</h4>
<p class="topless"><a href="os.path.html"
title="上一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">os.path</span></code> --- 常用路径操作</a></p>
<h4>下一个主题</h4>
<p class="topless"><a href="stat.html"
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">stat</span></code> --- 解析 <code class="xref py py-func docutils literal notranslate"><span class="pre">stat()</span></code> 结果</a></p>
<div role="note" aria-label="source link">
<h3>本页</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">报告 Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/fileinput.rst"
rel="nofollow">显示源代码
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>导航</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="总目录"
>索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python 模块索引"
>模块</a> |</li>
<li class="right" >
<a href="stat.html" title="stat --- 解析 stat() 结果"
>下一页</a> |</li>
<li class="right" >
<a href="os.path.html" title="os.path --- 常用路径操作"
>上一页</a> |</li>
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.8.20 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="filesys.html" >文件和目录访问</a> &#187;</li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
<input type="submit" value="转向" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
|
</li>
</ul>
</div>
<div class="footer">
&copy; <a href="../copyright.html">版权所有</a> 2001-2024, Python Software Foundation.
<br />
This page is licensed under the Python Software Foundation License Version 2.
<br />
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
<br />
<br />
The Python Software Foundation is a non-profit corporation.
<a href="https://www.python.org/psf/donations/">Please donate.</a>
<br />
<br />
最后更新于 12月 09, 2024.
<a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
<br />
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 2.4.4.
</div>
</body>
</html>