mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-08 23:14:06 +08:00
17 lines
11 KiB
HTML
17 lines
11 KiB
HTML
<div class="body" role="main"><div class="section" id="module-glob"><h1><span class="yiyi-st" id="yiyi-10">11.7. <a class="reference internal" href="#module-glob" title="glob: Unix shell style pathname pattern expansion."><code class="xref py py-mod docutils literal"><span class="pre">glob</span></code></a> — Unix风格的路径名匹配</span></h1><p><span class="yiyi-st" id="yiyi-11"><strong>源代码:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/glob.py">Lib/glob.py</a></span></p><p><span class="yiyi-st" id="yiyi-12"><a class="reference internal" href="#module-glob" title="glob: Unix shell style pathname pattern expansion."><code class="xref py py-mod docutils literal"><span class="pre">glob</span></code></a> 模块使用一个Unix shell规则的字符串查找与其匹配的所有路径, 但返回的结果是无序的。</span><span class="yiyi-st" id="yiyi-13">支持除波浪号~之外的其他符号,如<code class="docutils literal"><span class="pre">*</span></code>,<code class="docutils literal"><span class="pre">?</span></code>及用<code class="docutils literal"><span class="pre">[]</span></code>包裹的字符范围。</span><span class="yiyi-st" id="yiyi-14">此函数内部使用了<a class="reference internal" href="os.html#os.listdir" title="os.listdir"><code class="xref py py-func docutils literal"><span class="pre">os.listdir()</span></code></a> 及<a class="reference internal" href="fnmatch.html#fnmatch.fnmatch" title="fnmatch.fnmatch"><code class="xref py py-func docutils literal"><span class="pre">fnmatch.fnmatch()</span></code></a>实现,而没有真正调用一个shell。</span><span class="yiyi-st" id="yiyi-15">请注意,与<a class="reference internal" href="fnmatch.html#fnmatch.fnmatch" title="fnmatch.fnmatch"><code class="xref py py-func docutils literal"><span class="pre">fnmatch.fnmatch()</span></code></a>不同的是,<a class="reference internal" href="#module-glob" title="glob: Unix shell style pathname pattern expansion."><code class="xref py py-mod docutils literal"><span class="pre">glob</span></code></a>将文件路径以点(<code class="docutils literal"><span class="pre">.</span></code>)开头视为一个特殊情况。</span><span class="yiyi-st" id="yiyi-16">(对于波浪号扩展和shell变量扩展,使用 <a class="reference internal" href="os.path.html#os.path.expanduser" title="os.path.expanduser"><code class="xref py py-func docutils literal"><span class="pre">os.path.expanduser()</span></code></a> 和 <a class="reference internal" href="os.path.html#os.path.expandvars" title="os.path.expandvars"><code class="xref py py-func docutils literal"><span class="pre">os.path.expandvars()</span></code></a>。)</span></p><p><span class="yiyi-st" id="yiyi-17">如果想匹配转义符本身,将转义符用方括号包裹。</span><span class="yiyi-st" id="yiyi-18">例如, <code class="docutils literal"><span class="pre">'[?]'</span></code></span><span class="yiyi-st" id="yiyi-19">将匹配字符 <code class="docutils literal"><span class="pre">'?'</span></code>。</span></p><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-20">参见</span></p><p class="last"><span class="yiyi-st" id="yiyi-21"><a class="reference internal" href="pathlib.html#module-pathlib" title="pathlib: Object-oriented filesystem paths"><code class="xref py py-mod docutils literal"><span class="pre">pathlib</span></code></a>模块提供高级的路径对象处理。</span></p></div><dl class="function"><dt id="glob.glob"><span class="yiyi-st" id="yiyi-22"> <code class="descclassname">glob.</code><code class="descname">glob</code><span class="sig-paren">(</span><em>pathname</em>, <em>*</em>, <em>recursive=False</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-23">返回一个与<em>pathname</em>匹配的路径组成的list,该list可能为空。 该参数必须为包含路径说明的字符串。</span><span class="yiyi-st" id="yiyi-24"><em>pathname</em> 可以为绝对路径 (like <code class="file docutils literal"><span class="pre">/usr/src/Python-1.5/Makefile</span></code>) 或相对路径 (like <code class="file docutils literal"><span class="pre">../../Tools/*/*.gif</span></code>), 并且可以包含shell风格的通配符。</span><span class="yiyi-st" id="yiyi-25">损坏的符号链接将被包含在结果中 (类似于shell中)。</span></p><p><span class="yiyi-st" id="yiyi-26">如果 <em>recursive</em> 设置为真,“<code class="docutils literal"><span class="pre">**</span></code>” 将匹配所有存在的目录和子目录和任何文件。</span><span class="yiyi-st" id="yiyi-27">如果匹配式以 <code class="docutils literal"><span class="pre">os.sep</span></code> 结尾, 只对目录和子目录进行匹配。</span></p><div class="admonition note"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-28">注意</span></p><p class="last"><span class="yiyi-st" id="yiyi-29">在一个大型目录树中使用 “<code class="docutils literal"><span class="pre">**</span></code>” 可能会消耗过多的时间。</span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-30"><span class="versionmodified">版本3.5中修改:</span>支持启用递归时使用 “<code class="docutils literal"><span class="pre">**</span></code>”。</span></p></div></dd></dl><dl class="function"><dt id="glob.iglob"><span class="yiyi-st" id="yiyi-31"> <code class="descclassname">glob.</code><code class="descname">iglob</code><span class="sig-paren">(</span><em>pathname</em>, <em>recursive=False</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-32">返回一个 <a class="reference internal" href="../glossary.html#term-iterator"><span class="xref std std-term">iterator</span></a> 迭代器,它产生与 <a class="reference internal" href="#module-glob" title="glob: Unix shell style pathname pattern expansion."><code class="xref py py-func docutils literal"><span class="pre">glob()</span></code></a> 相同的结果,但同时不会存储它们。</span></p></dd></dl><dl class="function"><dt id="glob.escape"><span class="yiyi-st" id="yiyi-33"> <code class="descclassname">glob.</code><code class="descname">escape</code><span class="sig-paren">(</span><em>pathname</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-34">转义所有的特殊字符(<code class="docutils literal"><span class="pre">'?'</span></code>,<code class="docutils literal"><span class="pre">'*'</span></code>和<code class="docutils literal"><span class="pre">'['</span></code>])。</span><span class="yiyi-st" id="yiyi-35">如果您想匹配任意可能包含特殊字符的字符串,这将非常有用。</span><span class="yiyi-st" id="yiyi-36">驱动器/ UNC共享点中的特殊字符不会转义,例如</span><span class="yiyi-st" id="yiyi-37">在Windows系统上 <code class="docutils literal"><span class="pre">escape('//?/c:/Quo</span> <span class="pre">vadis?.txt')</span></code> 将返回 <code class="docutils literal"><span class="pre">'//?/c:/Quo</span> <span class="pre">vadis[?].txt'</span></code>。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-38"><span class="versionmodified">版本3.4中新增。</span></span></p></div></dd></dl><p><span class="yiyi-st" id="yiyi-39">例如,一个包含以下文件的目录:<code class="file docutils literal"><span class="pre">1.gif</span></code>,<code class="file docutils literal"><span class="pre">2.txt</span></code>,<code class="file docutils literal"><span class="pre">card.gif</span></code>,目录中还有一子目录<code class="file docutils literal"><span class="pre">sub</span></code>其中只包含文件<code class="file docutils literal"><span class="pre">3.txt</span></code>。</span><span class="yiyi-st" id="yiyi-40"><a class="reference internal" href="#module-glob" title="glob: Unix shell style pathname pattern expansion."><code class="xref py py-func docutils literal"><span class="pre">glob()</span></code></a>将产生以下结果。</span><span class="yiyi-st" id="yiyi-41">注意如何保留路径的任何前导组件。</span></p><pre><code class="language-python"><span></span><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">glob</span>
|
||
<span class="gp">>>> </span><span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s1">'./[0-9].*'</span><span class="p">)</span>
|
||
<span class="go">['./1.gif', './2.txt']</span>
|
||
<span class="gp">>>> </span><span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s1">'*.gif'</span><span class="p">)</span>
|
||
<span class="go">['1.gif', 'card.gif']</span>
|
||
<span class="gp">>>> </span><span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s1">'?.gif'</span><span class="p">)</span>
|
||
<span class="go">['1.gif']</span>
|
||
<span class="gp">>>> </span><span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s1">'**/*.txt'</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||
<span class="go">['2.txt', 'sub/3.txt']</span>
|
||
<span class="gp">>>> </span><span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s1">'./**/'</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||
<span class="go">['./', './sub/']</span>
|
||
</code></pre><p><span class="yiyi-st" id="yiyi-42">如果目录包含以<code class="docutils literal"><span class="pre">.</span></code>开头的文件。</span><span class="yiyi-st" id="yiyi-43">默认将不会匹配到它们。</span><span class="yiyi-st" id="yiyi-44">例如,一个包含<code class="file docutils literal"><span class="pre">card.gif</span></code>和<code class="file docutils literal"><span class="pre">.card.gif</span></code>的目录:</span></p><pre><code class="language-python"><span></span><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">glob</span>
|
||
<span class="gp">>>> </span><span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s1">'*.gif'</span><span class="p">)</span>
|
||
<span class="go">['card.gif']</span>
|
||
<span class="gp">>>> </span><span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s1">'.c*'</span><span class="p">)</span>
|
||
<span class="go">['.card.gif']</span>
|
||
</code></pre><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-45">参见</span></p><dl class="last docutils"><dt><span class="yiyi-st" id="yiyi-46">模块 <a class="reference internal" href="fnmatch.html#module-fnmatch" title="fnmatch: Unix shell style filename pattern matching."><code class="xref py py-mod docutils literal"><span class="pre">fnmatch</span></code></a></span></dt><dd><span class="yiyi-st" id="yiyi-47">Shell风格的文件名(而不是路径)扩展</span></dd></dl></div></div></div> |