809 lines
73 KiB
HTML
809 lines
73 KiB
HTML
|
||
<!DOCTYPE html>
|
||
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<title>shutil — High-level file operations — Python 3.7.4 documentation</title>
|
||
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
|
||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||
|
||
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
||
<script type="text/javascript" src="../_static/jquery.js"></script>
|
||
<script type="text/javascript" src="../_static/underscore.js"></script>
|
||
<script type="text/javascript" src="../_static/doctools.js"></script>
|
||
<script type="text/javascript" src="../_static/language_data.js"></script>
|
||
|
||
<script type="text/javascript" src="../_static/sidebar.js"></script>
|
||
|
||
<link rel="search" type="application/opensearchdescription+xml"
|
||
title="Search within Python 3.7.4 documentation"
|
||
href="../_static/opensearch.xml"/>
|
||
<link rel="author" title="About these documents" href="../about.html" />
|
||
<link rel="index" title="Index" href="../genindex.html" />
|
||
<link rel="search" title="Search" href="../search.html" />
|
||
<link rel="copyright" title="Copyright" href="../copyright.html" />
|
||
<link rel="next" title="macpath — Mac OS 9 path manipulation functions" href="macpath.html" />
|
||
<link rel="prev" title="linecache — Random access to text lines" href="linecache.html" />
|
||
<link rel="shortcut icon" type="image/png" href="../_static/py.png" />
|
||
<link rel="canonical" href="https://docs.python.org/3/library/shutil.html" />
|
||
|
||
<script type="text/javascript" src="../_static/copybutton.js"></script>
|
||
<script type="text/javascript" src="../_static/switchers.js"></script>
|
||
|
||
|
||
|
||
<style>
|
||
@media only screen {
|
||
table.full-width-table {
|
||
width: 100%;
|
||
}
|
||
}
|
||
</style>
|
||
|
||
|
||
</head><body>
|
||
|
||
<div class="related" role="navigation" aria-label="related navigation">
|
||
<h3>Navigation</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="General Index"
|
||
accesskey="I">index</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python Module Index"
|
||
>modules</a> |</li>
|
||
<li class="right" >
|
||
<a href="macpath.html" title="macpath — Mac OS 9 path manipulation functions"
|
||
accesskey="N">next</a> |</li>
|
||
<li class="right" >
|
||
<a href="linecache.html" title="linecache — Random access to text lines"
|
||
accesskey="P">previous</a> |</li>
|
||
<li><img src="../_static/py.png" alt=""
|
||
style="vertical-align: middle; margin-top: -1px"/></li>
|
||
<li><a href="https://www.python.org/">Python</a> »</li>
|
||
<li>
|
||
<span class="language_switcher_placeholder">en</span>
|
||
<span class="version_switcher_placeholder">3.7.4</span>
|
||
<a href="../index.html">Documentation </a> »
|
||
</li>
|
||
|
||
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
|
||
<li class="nav-item nav-item-2"><a href="filesys.html" accesskey="U">File and Directory Access</a> »</li>
|
||
<li class="right">
|
||
|
||
|
||
<div class="inline-search" style="display: none" role="search">
|
||
<form class="inline-search" action="../search.html" method="get">
|
||
<input placeholder="Quick search" type="text" name="q" />
|
||
<input type="submit" value="Go" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
<script type="text/javascript">$('.inline-search').show(0);</script>
|
||
|
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="document">
|
||
<div class="documentwrapper">
|
||
<div class="bodywrapper">
|
||
<div class="body" role="main">
|
||
|
||
<div class="section" id="module-shutil">
|
||
<span id="shutil-high-level-file-operations"></span><h1><a class="reference internal" href="#module-shutil" title="shutil: High-level file operations, including copying."><code class="xref py py-mod docutils literal notranslate"><span class="pre">shutil</span></code></a> — High-level file operations<a class="headerlink" href="#module-shutil" title="Permalink to this headline">¶</a></h1>
|
||
<p><strong>Source code:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.7/Lib/shutil.py">Lib/shutil.py</a></p>
|
||
<hr class="docutils" id="index-0" />
|
||
<p>The <a class="reference internal" href="#module-shutil" title="shutil: High-level file operations, including copying."><code class="xref py py-mod docutils literal notranslate"><span class="pre">shutil</span></code></a> module offers a number of high-level operations on files and
|
||
collections of files. In particular, functions are provided which support file
|
||
copying and removal. For operations on individual files, see also the
|
||
<a class="reference internal" href="os.html#module-os" title="os: Miscellaneous operating system interfaces."><code class="xref py py-mod docutils literal notranslate"><span class="pre">os</span></code></a> module.</p>
|
||
<div class="admonition warning">
|
||
<p class="admonition-title">Warning</p>
|
||
<p>Even the higher-level file copying functions (<a class="reference internal" href="#shutil.copy" title="shutil.copy"><code class="xref py py-func docutils literal notranslate"><span class="pre">shutil.copy()</span></code></a>,
|
||
<a class="reference internal" href="#shutil.copy2" title="shutil.copy2"><code class="xref py py-func docutils literal notranslate"><span class="pre">shutil.copy2()</span></code></a>) cannot copy all file metadata.</p>
|
||
<p>On POSIX platforms, this means that file owner and group are lost as well
|
||
as ACLs. On Mac OS, the resource fork and other metadata are not used.
|
||
This means that resources will be lost and file type and creator codes will
|
||
not be correct. On Windows, file owners, ACLs and alternate data streams
|
||
are not copied.</p>
|
||
</div>
|
||
<div class="section" id="directory-and-files-operations">
|
||
<span id="file-operations"></span><h2>Directory and files operations<a class="headerlink" href="#directory-and-files-operations" title="Permalink to this headline">¶</a></h2>
|
||
<dl class="function">
|
||
<dt id="shutil.copyfileobj">
|
||
<code class="descclassname">shutil.</code><code class="descname">copyfileobj</code><span class="sig-paren">(</span><em>fsrc</em>, <em>fdst</em><span class="optional">[</span>, <em>length</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#shutil.copyfileobj" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Copy the contents of the file-like object <em>fsrc</em> to the file-like object <em>fdst</em>.
|
||
The integer <em>length</em>, if given, is the buffer size. In particular, a negative
|
||
<em>length</em> value means to copy the data without looping over the source data in
|
||
chunks; by default the data is read in chunks to avoid uncontrolled memory
|
||
consumption. Note that if the current file position of the <em>fsrc</em> object is not
|
||
0, only the contents from the current file position to the end of the file will
|
||
be copied.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.copyfile">
|
||
<code class="descclassname">shutil.</code><code class="descname">copyfile</code><span class="sig-paren">(</span><em>src</em>, <em>dst</em>, <em>*</em>, <em>follow_symlinks=True</em><span class="sig-paren">)</span><a class="headerlink" href="#shutil.copyfile" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Copy the contents (no metadata) of the file named <em>src</em> to a file named
|
||
<em>dst</em> and return <em>dst</em>. <em>src</em> and <em>dst</em> are path names given as strings.
|
||
<em>dst</em> must be the complete target file name; look at <a class="reference internal" href="#shutil.copy" title="shutil.copy"><code class="xref py py-func docutils literal notranslate"><span class="pre">shutil.copy()</span></code></a>
|
||
for a copy that accepts a target directory path. If <em>src</em> and <em>dst</em>
|
||
specify the same file, <a class="reference internal" href="#shutil.SameFileError" title="shutil.SameFileError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SameFileError</span></code></a> is raised.</p>
|
||
<p>The destination location must be writable; otherwise, an <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>
|
||
exception will be raised. If <em>dst</em> already exists, it will be replaced.
|
||
Special files such as character or block devices and pipes cannot be
|
||
copied with this function.</p>
|
||
<p>If <em>follow_symlinks</em> is false and <em>src</em> is a symbolic link,
|
||
a new symbolic link will be created instead of copying the
|
||
file <em>src</em> points to.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 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> used to be raised instead of <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>.
|
||
Added <em>follow_symlinks</em> argument.
|
||
Now returns <em>dst</em>.</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.4: </span>Raise <a class="reference internal" href="#shutil.SameFileError" title="shutil.SameFileError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SameFileError</span></code></a> instead of <a class="reference internal" href="#shutil.Error" title="shutil.Error"><code class="xref py py-exc docutils literal notranslate"><span class="pre">Error</span></code></a>. Since the former is
|
||
a subclass of the latter, this change is backward compatible.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="exception">
|
||
<dt id="shutil.SameFileError">
|
||
<em class="property">exception </em><code class="descclassname">shutil.</code><code class="descname">SameFileError</code><a class="headerlink" href="#shutil.SameFileError" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>This exception is raised if source and destination in <a class="reference internal" href="#shutil.copyfile" title="shutil.copyfile"><code class="xref py py-func docutils literal notranslate"><span class="pre">copyfile()</span></code></a>
|
||
are the same file.</p>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">New in version 3.4.</span></p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.copymode">
|
||
<code class="descclassname">shutil.</code><code class="descname">copymode</code><span class="sig-paren">(</span><em>src</em>, <em>dst</em>, <em>*</em>, <em>follow_symlinks=True</em><span class="sig-paren">)</span><a class="headerlink" href="#shutil.copymode" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Copy the permission bits from <em>src</em> to <em>dst</em>. The file contents, owner, and
|
||
group are unaffected. <em>src</em> and <em>dst</em> are path names given as strings.
|
||
If <em>follow_symlinks</em> is false, and both <em>src</em> and <em>dst</em> are symbolic links,
|
||
<a class="reference internal" href="#shutil.copymode" title="shutil.copymode"><code class="xref py py-func docutils literal notranslate"><span class="pre">copymode()</span></code></a> will attempt to modify the mode of <em>dst</em> itself (rather
|
||
than the file it points to). This functionality is not available on every
|
||
platform; please see <a class="reference internal" href="#shutil.copystat" title="shutil.copystat"><code class="xref py py-func docutils literal notranslate"><span class="pre">copystat()</span></code></a> for more information. If
|
||
<a class="reference internal" href="#shutil.copymode" title="shutil.copymode"><code class="xref py py-func docutils literal notranslate"><span class="pre">copymode()</span></code></a> cannot modify symbolic links on the local platform, and it
|
||
is asked to do so, it will do nothing and return.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.3: </span>Added <em>follow_symlinks</em> argument.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.copystat">
|
||
<code class="descclassname">shutil.</code><code class="descname">copystat</code><span class="sig-paren">(</span><em>src</em>, <em>dst</em>, <em>*</em>, <em>follow_symlinks=True</em><span class="sig-paren">)</span><a class="headerlink" href="#shutil.copystat" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Copy the permission bits, last access time, last modification time, and
|
||
flags from <em>src</em> to <em>dst</em>. On Linux, <a class="reference internal" href="#shutil.copystat" title="shutil.copystat"><code class="xref py py-func docutils literal notranslate"><span class="pre">copystat()</span></code></a> also copies the
|
||
“extended attributes” where possible. The file contents, owner, and
|
||
group are unaffected. <em>src</em> and <em>dst</em> are path names given as strings.</p>
|
||
<p>If <em>follow_symlinks</em> is false, and <em>src</em> and <em>dst</em> both
|
||
refer to symbolic links, <a class="reference internal" href="#shutil.copystat" title="shutil.copystat"><code class="xref py py-func docutils literal notranslate"><span class="pre">copystat()</span></code></a> will operate on
|
||
the symbolic links themselves rather than the files the
|
||
symbolic links refer to—reading the information from the
|
||
<em>src</em> symbolic link, and writing the information to the
|
||
<em>dst</em> symbolic link.</p>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>Not all platforms provide the ability to examine and
|
||
modify symbolic links. Python itself can tell you what
|
||
functionality is locally available.</p>
|
||
<ul class="simple">
|
||
<li><p>If <code class="docutils literal notranslate"><span class="pre">os.chmod</span> <span class="pre">in</span> <span class="pre">os.supports_follow_symlinks</span></code> is
|
||
<code class="docutils literal notranslate"><span class="pre">True</span></code>, <a class="reference internal" href="#shutil.copystat" title="shutil.copystat"><code class="xref py py-func docutils literal notranslate"><span class="pre">copystat()</span></code></a> can modify the permission
|
||
bits of a symbolic link.</p></li>
|
||
<li><p>If <code class="docutils literal notranslate"><span class="pre">os.utime</span> <span class="pre">in</span> <span class="pre">os.supports_follow_symlinks</span></code> is
|
||
<code class="docutils literal notranslate"><span class="pre">True</span></code>, <a class="reference internal" href="#shutil.copystat" title="shutil.copystat"><code class="xref py py-func docutils literal notranslate"><span class="pre">copystat()</span></code></a> can modify the last access
|
||
and modification times of a symbolic link.</p></li>
|
||
<li><p>If <code class="docutils literal notranslate"><span class="pre">os.chflags</span> <span class="pre">in</span> <span class="pre">os.supports_follow_symlinks</span></code> is
|
||
<code class="docutils literal notranslate"><span class="pre">True</span></code>, <a class="reference internal" href="#shutil.copystat" title="shutil.copystat"><code class="xref py py-func docutils literal notranslate"><span class="pre">copystat()</span></code></a> can modify the flags of
|
||
a symbolic link. (<code class="docutils literal notranslate"><span class="pre">os.chflags</span></code> is not available on
|
||
all platforms.)</p></li>
|
||
</ul>
|
||
<p>On platforms where some or all of this functionality
|
||
is unavailable, when asked to modify a symbolic link,
|
||
<a class="reference internal" href="#shutil.copystat" title="shutil.copystat"><code class="xref py py-func docutils literal notranslate"><span class="pre">copystat()</span></code></a> will copy everything it can.
|
||
<a class="reference internal" href="#shutil.copystat" title="shutil.copystat"><code class="xref py py-func docutils literal notranslate"><span class="pre">copystat()</span></code></a> never returns failure.</p>
|
||
<p>Please see <a class="reference internal" href="os.html#os.supports_follow_symlinks" title="os.supports_follow_symlinks"><code class="xref py py-data docutils literal notranslate"><span class="pre">os.supports_follow_symlinks</span></code></a>
|
||
for more information.</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.3: </span>Added <em>follow_symlinks</em> argument and support for Linux extended attributes.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.copy">
|
||
<code class="descclassname">shutil.</code><code class="descname">copy</code><span class="sig-paren">(</span><em>src</em>, <em>dst</em>, <em>*</em>, <em>follow_symlinks=True</em><span class="sig-paren">)</span><a class="headerlink" href="#shutil.copy" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Copies the file <em>src</em> to the file or directory <em>dst</em>. <em>src</em> and <em>dst</em>
|
||
should be strings. If <em>dst</em> specifies a directory, the file will be
|
||
copied into <em>dst</em> using the base filename from <em>src</em>. Returns the
|
||
path to the newly created file.</p>
|
||
<p>If <em>follow_symlinks</em> is false, and <em>src</em> is a symbolic link,
|
||
<em>dst</em> will be created as a symbolic link. If <em>follow_symlinks</em>
|
||
is true and <em>src</em> is a symbolic link, <em>dst</em> will be a copy of
|
||
the file <em>src</em> refers to.</p>
|
||
<p><a class="reference internal" href="#shutil.copy" title="shutil.copy"><code class="xref py py-func docutils literal notranslate"><span class="pre">copy()</span></code></a> copies the file data and the file’s permission
|
||
mode (see <a class="reference internal" href="os.html#os.chmod" title="os.chmod"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.chmod()</span></code></a>). Other metadata, like the
|
||
file’s creation and modification times, is not preserved.
|
||
To preserve all file metadata from the original, use
|
||
<a class="reference internal" href="#shutil.copy2" title="shutil.copy2"><code class="xref py py-func docutils literal notranslate"><span class="pre">copy2()</span></code></a> instead.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.3: </span>Added <em>follow_symlinks</em> argument.
|
||
Now returns path to the newly created file.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.copy2">
|
||
<code class="descclassname">shutil.</code><code class="descname">copy2</code><span class="sig-paren">(</span><em>src</em>, <em>dst</em>, <em>*</em>, <em>follow_symlinks=True</em><span class="sig-paren">)</span><a class="headerlink" href="#shutil.copy2" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Identical to <a class="reference internal" href="#shutil.copy" title="shutil.copy"><code class="xref py py-func docutils literal notranslate"><span class="pre">copy()</span></code></a> except that <a class="reference internal" href="#shutil.copy2" title="shutil.copy2"><code class="xref py py-func docutils literal notranslate"><span class="pre">copy2()</span></code></a>
|
||
also attempts to preserve file metadata.</p>
|
||
<p>When <em>follow_symlinks</em> is false, and <em>src</em> is a symbolic
|
||
link, <a class="reference internal" href="#shutil.copy2" title="shutil.copy2"><code class="xref py py-func docutils literal notranslate"><span class="pre">copy2()</span></code></a> attempts to copy all metadata from the
|
||
<em>src</em> symbolic link to the newly-created <em>dst</em> symbolic link.
|
||
However, this functionality is not available on all platforms.
|
||
On platforms where some or all of this functionality is
|
||
unavailable, <a class="reference internal" href="#shutil.copy2" title="shutil.copy2"><code class="xref py py-func docutils literal notranslate"><span class="pre">copy2()</span></code></a> will preserve all the metadata
|
||
it can; <a class="reference internal" href="#shutil.copy2" title="shutil.copy2"><code class="xref py py-func docutils literal notranslate"><span class="pre">copy2()</span></code></a> never returns failure.</p>
|
||
<p><a class="reference internal" href="#shutil.copy2" title="shutil.copy2"><code class="xref py py-func docutils literal notranslate"><span class="pre">copy2()</span></code></a> uses <a class="reference internal" href="#shutil.copystat" title="shutil.copystat"><code class="xref py py-func docutils literal notranslate"><span class="pre">copystat()</span></code></a> to copy the file metadata.
|
||
Please see <a class="reference internal" href="#shutil.copystat" title="shutil.copystat"><code class="xref py py-func docutils literal notranslate"><span class="pre">copystat()</span></code></a> for more information
|
||
about platform support for modifying symbolic link metadata.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.3: </span>Added <em>follow_symlinks</em> argument, try to copy extended
|
||
file system attributes too (currently Linux only).
|
||
Now returns path to the newly created file.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.ignore_patterns">
|
||
<code class="descclassname">shutil.</code><code class="descname">ignore_patterns</code><span class="sig-paren">(</span><em>*patterns</em><span class="sig-paren">)</span><a class="headerlink" href="#shutil.ignore_patterns" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>This factory function creates a function that can be used as a callable for
|
||
<a class="reference internal" href="#shutil.copytree" title="shutil.copytree"><code class="xref py py-func docutils literal notranslate"><span class="pre">copytree()</span></code></a>’s <em>ignore</em> argument, ignoring files and directories that
|
||
match one of the glob-style <em>patterns</em> provided. See the example below.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.copytree">
|
||
<code class="descclassname">shutil.</code><code class="descname">copytree</code><span class="sig-paren">(</span><em>src</em>, <em>dst</em>, <em>symlinks=False</em>, <em>ignore=None</em>, <em>copy_function=copy2</em>, <em>ignore_dangling_symlinks=False</em><span class="sig-paren">)</span><a class="headerlink" href="#shutil.copytree" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Recursively copy an entire directory tree rooted at <em>src</em>, returning the
|
||
destination directory. The destination
|
||
directory, named by <em>dst</em>, must not already exist; it will be created as
|
||
well as missing parent directories. Permissions and times of directories
|
||
are copied with <a class="reference internal" href="#shutil.copystat" title="shutil.copystat"><code class="xref py py-func docutils literal notranslate"><span class="pre">copystat()</span></code></a>, individual files are copied using
|
||
<a class="reference internal" href="#shutil.copy2" title="shutil.copy2"><code class="xref py py-func docutils literal notranslate"><span class="pre">shutil.copy2()</span></code></a>.</p>
|
||
<p>If <em>symlinks</em> is true, symbolic links in the source tree are represented as
|
||
symbolic links in the new tree and the metadata of the original links will
|
||
be copied as far as the platform allows; if false or omitted, the contents
|
||
and metadata of the linked files are copied to the new tree.</p>
|
||
<p>When <em>symlinks</em> is false, if the file pointed by the symlink doesn’t
|
||
exist, an exception will be added in the list of errors raised in
|
||
an <a class="reference internal" href="#shutil.Error" title="shutil.Error"><code class="xref py py-exc docutils literal notranslate"><span class="pre">Error</span></code></a> exception at the end of the copy process.
|
||
You can set the optional <em>ignore_dangling_symlinks</em> flag to true if you
|
||
want to silence this exception. Notice that this option has no effect
|
||
on platforms that don’t support <a class="reference internal" href="os.html#os.symlink" title="os.symlink"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.symlink()</span></code></a>.</p>
|
||
<p>If <em>ignore</em> is given, it must be a callable that will receive as its
|
||
arguments the directory being visited by <a class="reference internal" href="#shutil.copytree" title="shutil.copytree"><code class="xref py py-func docutils literal notranslate"><span class="pre">copytree()</span></code></a>, and a list of its
|
||
contents, as returned by <a class="reference internal" href="os.html#os.listdir" title="os.listdir"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.listdir()</span></code></a>. Since <a class="reference internal" href="#shutil.copytree" title="shutil.copytree"><code class="xref py py-func docutils literal notranslate"><span class="pre">copytree()</span></code></a> is
|
||
called recursively, the <em>ignore</em> callable will be called once for each
|
||
directory that is copied. The callable must return a sequence of directory
|
||
and file names relative to the current directory (i.e. a subset of the items
|
||
in its second argument); these names will then be ignored in the copy
|
||
process. <a class="reference internal" href="#shutil.ignore_patterns" title="shutil.ignore_patterns"><code class="xref py py-func docutils literal notranslate"><span class="pre">ignore_patterns()</span></code></a> can be used to create such a callable that
|
||
ignores names based on glob-style patterns.</p>
|
||
<p>If exception(s) occur, an <a class="reference internal" href="#shutil.Error" title="shutil.Error"><code class="xref py py-exc docutils literal notranslate"><span class="pre">Error</span></code></a> is raised with a list of reasons.</p>
|
||
<p>If <em>copy_function</em> is given, it must be a callable that will be used to copy
|
||
each file. It will be called with the source path and the destination path
|
||
as arguments. By default, <a class="reference internal" href="#shutil.copy2" title="shutil.copy2"><code class="xref py py-func docutils literal notranslate"><span class="pre">shutil.copy2()</span></code></a> is used, but any function
|
||
that supports the same signature (like <a class="reference internal" href="#shutil.copy" title="shutil.copy"><code class="xref py py-func docutils literal notranslate"><span class="pre">shutil.copy()</span></code></a>) can be used.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.3: </span>Copy metadata when <em>symlinks</em> is false.
|
||
Now returns <em>dst</em>.</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.2: </span>Added the <em>copy_function</em> argument to be able to provide a custom copy
|
||
function.
|
||
Added the <em>ignore_dangling_symlinks</em> argument to silent dangling symlinks
|
||
errors when <em>symlinks</em> is false.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.rmtree">
|
||
<code class="descclassname">shutil.</code><code class="descname">rmtree</code><span class="sig-paren">(</span><em>path</em>, <em>ignore_errors=False</em>, <em>onerror=None</em><span class="sig-paren">)</span><a class="headerlink" href="#shutil.rmtree" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p id="index-1">Delete an entire directory tree; <em>path</em> must point to a directory (but not a
|
||
symbolic link to a directory). If <em>ignore_errors</em> is true, errors resulting
|
||
from failed removals will be ignored; if false or omitted, such errors are
|
||
handled by calling a handler specified by <em>onerror</em> or, if that is omitted,
|
||
they raise an exception.</p>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>On platforms that support the necessary fd-based functions a symlink
|
||
attack resistant version of <a class="reference internal" href="#shutil.rmtree" title="shutil.rmtree"><code class="xref py py-func docutils literal notranslate"><span class="pre">rmtree()</span></code></a> is used by default. On other
|
||
platforms, the <a class="reference internal" href="#shutil.rmtree" title="shutil.rmtree"><code class="xref py py-func docutils literal notranslate"><span class="pre">rmtree()</span></code></a> implementation is susceptible to a symlink
|
||
attack: given proper timing and circumstances, attackers can manipulate
|
||
symlinks on the filesystem to delete files they wouldn’t be able to access
|
||
otherwise. Applications can use the <a class="reference internal" href="#shutil.rmtree.avoids_symlink_attacks" title="shutil.rmtree.avoids_symlink_attacks"><code class="xref py py-data docutils literal notranslate"><span class="pre">rmtree.avoids_symlink_attacks</span></code></a>
|
||
function attribute to determine which case applies.</p>
|
||
</div>
|
||
<p>If <em>onerror</em> is provided, it must be a callable that accepts three
|
||
parameters: <em>function</em>, <em>path</em>, and <em>excinfo</em>.</p>
|
||
<p>The first parameter, <em>function</em>, is the function which raised the exception;
|
||
it depends on the platform and implementation. The second parameter,
|
||
<em>path</em>, will be the path name passed to <em>function</em>. The third parameter,
|
||
<em>excinfo</em>, will be the exception information returned by
|
||
<a class="reference internal" href="sys.html#sys.exc_info" title="sys.exc_info"><code class="xref py py-func docutils literal notranslate"><span class="pre">sys.exc_info()</span></code></a>. Exceptions raised by <em>onerror</em> will not be caught.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.3: </span>Added a symlink attack resistant version that is used automatically
|
||
if platform supports fd-based functions.</p>
|
||
</div>
|
||
<dl class="attribute">
|
||
<dt id="shutil.rmtree.avoids_symlink_attacks">
|
||
<code class="descclassname">rmtree.</code><code class="descname">avoids_symlink_attacks</code><a class="headerlink" href="#shutil.rmtree.avoids_symlink_attacks" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Indicates whether the current platform and implementation provides a
|
||
symlink attack resistant version of <a class="reference internal" href="#shutil.rmtree" title="shutil.rmtree"><code class="xref py py-func docutils literal notranslate"><span class="pre">rmtree()</span></code></a>. Currently this is
|
||
only true for platforms supporting fd-based directory access functions.</p>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">New in version 3.3.</span></p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.move">
|
||
<code class="descclassname">shutil.</code><code class="descname">move</code><span class="sig-paren">(</span><em>src</em>, <em>dst</em>, <em>copy_function=copy2</em><span class="sig-paren">)</span><a class="headerlink" href="#shutil.move" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Recursively move a file or directory (<em>src</em>) to another location (<em>dst</em>)
|
||
and return the destination.</p>
|
||
<p>If the destination is an existing directory, then <em>src</em> is moved inside that
|
||
directory. If the destination already exists but is not a directory, it may
|
||
be overwritten depending on <a class="reference internal" href="os.html#os.rename" title="os.rename"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.rename()</span></code></a> semantics.</p>
|
||
<p>If the destination is on the current filesystem, then <a class="reference internal" href="os.html#os.rename" title="os.rename"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.rename()</span></code></a> is
|
||
used. Otherwise, <em>src</em> is copied to <em>dst</em> using <em>copy_function</em> and then
|
||
removed. In case of symlinks, a new symlink pointing to the target of <em>src</em>
|
||
will be created in or as <em>dst</em> and <em>src</em> will be removed.</p>
|
||
<p>If <em>copy_function</em> is given, it must be a callable that takes two arguments
|
||
<em>src</em> and <em>dst</em>, and will be used to copy <em>src</em> to <em>dest</em> if
|
||
<a class="reference internal" href="os.html#os.rename" title="os.rename"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.rename()</span></code></a> cannot be used. If the source is a directory,
|
||
<a class="reference internal" href="#shutil.copytree" title="shutil.copytree"><code class="xref py py-func docutils literal notranslate"><span class="pre">copytree()</span></code></a> is called, passing it the <code class="xref py py-func docutils literal notranslate"><span class="pre">copy_function()</span></code>. The
|
||
default <em>copy_function</em> is <a class="reference internal" href="#shutil.copy2" title="shutil.copy2"><code class="xref py py-func docutils literal notranslate"><span class="pre">copy2()</span></code></a>. Using <a class="reference internal" href="#shutil.copy" title="shutil.copy"><code class="xref py py-func docutils literal notranslate"><span class="pre">copy()</span></code></a> as the
|
||
<em>copy_function</em> allows the move to succeed when it is not possible to also
|
||
copy the metadata, at the expense of not copying any of the metadata.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.3: </span>Added explicit symlink handling for foreign filesystems, thus adapting
|
||
it to the behavior of GNU’s <strong class="program">mv</strong>.
|
||
Now returns <em>dst</em>.</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.5: </span>Added the <em>copy_function</em> keyword argument.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.disk_usage">
|
||
<code class="descclassname">shutil.</code><code class="descname">disk_usage</code><span class="sig-paren">(</span><em>path</em><span class="sig-paren">)</span><a class="headerlink" href="#shutil.disk_usage" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Return disk usage statistics about the given path as a <a class="reference internal" href="../glossary.html#term-named-tuple"><span class="xref std std-term">named tuple</span></a>
|
||
with the attributes <em>total</em>, <em>used</em> and <em>free</em>, which are the amount of
|
||
total, used and free space, in bytes. On Windows, <em>path</em> must be a
|
||
directory; on Unix, it can be a file or directory.</p>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">New in version 3.3.</span></p>
|
||
</div>
|
||
<p class="availability"><a class="reference internal" href="intro.html#availability"><span class="std std-ref">Availability</span></a>: Unix, Windows.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.chown">
|
||
<code class="descclassname">shutil.</code><code class="descname">chown</code><span class="sig-paren">(</span><em>path</em>, <em>user=None</em>, <em>group=None</em><span class="sig-paren">)</span><a class="headerlink" href="#shutil.chown" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Change owner <em>user</em> and/or <em>group</em> of the given <em>path</em>.</p>
|
||
<p><em>user</em> can be a system user name or a uid; the same applies to <em>group</em>. At
|
||
least one argument is required.</p>
|
||
<p>See also <a class="reference internal" href="os.html#os.chown" title="os.chown"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.chown()</span></code></a>, the underlying function.</p>
|
||
<p class="availability"><a class="reference internal" href="intro.html#availability"><span class="std std-ref">Availability</span></a>: Unix.</p>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">New in version 3.3.</span></p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.which">
|
||
<code class="descclassname">shutil.</code><code class="descname">which</code><span class="sig-paren">(</span><em>cmd</em>, <em>mode=os.F_OK | os.X_OK</em>, <em>path=None</em><span class="sig-paren">)</span><a class="headerlink" href="#shutil.which" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Return the path to an executable which would be run if the given <em>cmd</em> was
|
||
called. If no <em>cmd</em> would be called, return <code class="docutils literal notranslate"><span class="pre">None</span></code>.</p>
|
||
<p><em>mode</em> is a permission mask passed to <a class="reference internal" href="os.html#os.access" title="os.access"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.access()</span></code></a>, by default
|
||
determining if the file exists and executable.</p>
|
||
<p>When no <em>path</em> is specified, the results of <a class="reference internal" href="os.html#os.environ" title="os.environ"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.environ()</span></code></a> are used,
|
||
returning either the “PATH” value or a fallback of <a class="reference internal" href="os.html#os.defpath" title="os.defpath"><code class="xref py py-attr docutils literal notranslate"><span class="pre">os.defpath</span></code></a>.</p>
|
||
<p>On Windows, the current directory is always prepended to the <em>path</em> whether
|
||
or not you use the default or provide your own, which is the behavior the
|
||
command shell uses when finding executables. Additionally, when finding the
|
||
<em>cmd</em> in the <em>path</em>, the <code class="docutils literal notranslate"><span class="pre">PATHEXT</span></code> environment variable is checked. For
|
||
example, if you call <code class="docutils literal notranslate"><span class="pre">shutil.which("python")</span></code>, <a class="reference internal" href="#shutil.which" title="shutil.which"><code class="xref py py-func docutils literal notranslate"><span class="pre">which()</span></code></a> will search
|
||
<code class="docutils literal notranslate"><span class="pre">PATHEXT</span></code> to know that it should look for <code class="docutils literal notranslate"><span class="pre">python.exe</span></code> within the <em>path</em>
|
||
directories. For example, on Windows:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">shutil</span><span class="o">.</span><span class="n">which</span><span class="p">(</span><span class="s2">"python"</span><span class="p">)</span>
|
||
<span class="go">'C:\\Python33\\python.EXE'</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">New in version 3.3.</span></p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="exception">
|
||
<dt id="shutil.Error">
|
||
<em class="property">exception </em><code class="descclassname">shutil.</code><code class="descname">Error</code><a class="headerlink" href="#shutil.Error" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>This exception collects exceptions that are raised during a multi-file
|
||
operation. For <a class="reference internal" href="#shutil.copytree" title="shutil.copytree"><code class="xref py py-func docutils literal notranslate"><span class="pre">copytree()</span></code></a>, the exception argument is a list of 3-tuples
|
||
(<em>srcname</em>, <em>dstname</em>, <em>exception</em>).</p>
|
||
</dd></dl>
|
||
|
||
<div class="section" id="copytree-example">
|
||
<span id="shutil-copytree-example"></span><h3>copytree example<a class="headerlink" href="#copytree-example" title="Permalink to this headline">¶</a></h3>
|
||
<p>This example is the implementation of the <a class="reference internal" href="#shutil.copytree" title="shutil.copytree"><code class="xref py py-func docutils literal notranslate"><span class="pre">copytree()</span></code></a> function, described
|
||
above, with the docstring omitted. It demonstrates many of the other functions
|
||
provided by this module.</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">copytree</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="n">symlinks</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
<span class="n">names</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">src</span><span class="p">)</span>
|
||
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">dst</span><span class="p">)</span>
|
||
<span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
|
||
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
|
||
<span class="n">srcname</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
|
||
<span class="n">dstname</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dst</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
|
||
<span class="k">try</span><span class="p">:</span>
|
||
<span class="k">if</span> <span class="n">symlinks</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">islink</span><span class="p">(</span><span class="n">srcname</span><span class="p">):</span>
|
||
<span class="n">linkto</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">readlink</span><span class="p">(</span><span class="n">srcname</span><span class="p">)</span>
|
||
<span class="n">os</span><span class="o">.</span><span class="n">symlink</span><span class="p">(</span><span class="n">linkto</span><span class="p">,</span> <span class="n">dstname</span><span class="p">)</span>
|
||
<span class="k">elif</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">srcname</span><span class="p">):</span>
|
||
<span class="n">copytree</span><span class="p">(</span><span class="n">srcname</span><span class="p">,</span> <span class="n">dstname</span><span class="p">,</span> <span class="n">symlinks</span><span class="p">)</span>
|
||
<span class="k">else</span><span class="p">:</span>
|
||
<span class="n">copy2</span><span class="p">(</span><span class="n">srcname</span><span class="p">,</span> <span class="n">dstname</span><span class="p">)</span>
|
||
<span class="c1"># XXX What about devices, sockets etc.?</span>
|
||
<span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">why</span><span class="p">:</span>
|
||
<span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">srcname</span><span class="p">,</span> <span class="n">dstname</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">why</span><span class="p">)))</span>
|
||
<span class="c1"># catch the Error from the recursive copytree so that we can</span>
|
||
<span class="c1"># continue with other files</span>
|
||
<span class="k">except</span> <span class="n">Error</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
||
<span class="n">errors</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||
<span class="k">try</span><span class="p">:</span>
|
||
<span class="n">copystat</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">)</span>
|
||
<span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">why</span><span class="p">:</span>
|
||
<span class="c1"># can't copy file access times on Windows</span>
|
||
<span class="k">if</span> <span class="n">why</span><span class="o">.</span><span class="n">winerror</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
<span class="n">errors</span><span class="o">.</span><span class="n">extend</span><span class="p">((</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">why</span><span class="p">)))</span>
|
||
<span class="k">if</span> <span class="n">errors</span><span class="p">:</span>
|
||
<span class="k">raise</span> <span class="n">Error</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Another example that uses the <a class="reference internal" href="#shutil.ignore_patterns" title="shutil.ignore_patterns"><code class="xref py py-func docutils literal notranslate"><span class="pre">ignore_patterns()</span></code></a> helper:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">shutil</span> <span class="k">import</span> <span class="n">copytree</span><span class="p">,</span> <span class="n">ignore_patterns</span>
|
||
|
||
<span class="n">copytree</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">destination</span><span class="p">,</span> <span class="n">ignore</span><span class="o">=</span><span class="n">ignore_patterns</span><span class="p">(</span><span class="s1">'*.pyc'</span><span class="p">,</span> <span class="s1">'tmp*'</span><span class="p">))</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>This will copy everything except <code class="docutils literal notranslate"><span class="pre">.pyc</span></code> files and files or directories whose
|
||
name starts with <code class="docutils literal notranslate"><span class="pre">tmp</span></code>.</p>
|
||
<p>Another example that uses the <em>ignore</em> argument to add a logging call:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">shutil</span> <span class="k">import</span> <span class="n">copytree</span>
|
||
<span class="kn">import</span> <span class="nn">logging</span>
|
||
|
||
<span class="k">def</span> <span class="nf">_logpath</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">names</span><span class="p">):</span>
|
||
<span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">'Working in </span><span class="si">%s</span><span class="s1">'</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
|
||
<span class="k">return</span> <span class="p">[]</span> <span class="c1"># nothing will be ignored</span>
|
||
|
||
<span class="n">copytree</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">destination</span><span class="p">,</span> <span class="n">ignore</span><span class="o">=</span><span class="n">_logpath</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="rmtree-example">
|
||
<span id="shutil-rmtree-example"></span><h3>rmtree example<a class="headerlink" href="#rmtree-example" title="Permalink to this headline">¶</a></h3>
|
||
<p>This example shows how to remove a directory tree on Windows where some
|
||
of the files have their read-only bit set. It uses the onerror callback
|
||
to clear the readonly bit and reattempt the remove. Any subsequent failure
|
||
will propagate.</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">stat</span>
|
||
<span class="kn">import</span> <span class="nn">shutil</span>
|
||
|
||
<span class="k">def</span> <span class="nf">remove_readonly</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">_</span><span class="p">):</span>
|
||
<span class="s2">"Clear the readonly bit and reattempt the removal"</span>
|
||
<span class="n">os</span><span class="o">.</span><span class="n">chmod</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">stat</span><span class="o">.</span><span class="n">S_IWRITE</span><span class="p">)</span>
|
||
<span class="n">func</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
|
||
|
||
<span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">directory</span><span class="p">,</span> <span class="n">onerror</span><span class="o">=</span><span class="n">remove_readonly</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="archiving-operations">
|
||
<span id="id1"></span><h2>Archiving operations<a class="headerlink" href="#archiving-operations" title="Permalink to this headline">¶</a></h2>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">New in version 3.2.</span></p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.5: </span>Added support for the <em>xztar</em> format.</p>
|
||
</div>
|
||
<p>High-level utilities to create and read compressed and archived files are also
|
||
provided. They rely on the <a class="reference internal" href="zipfile.html#module-zipfile" title="zipfile: Read and write ZIP-format archive files."><code class="xref py py-mod docutils literal notranslate"><span class="pre">zipfile</span></code></a> and <a class="reference internal" href="tarfile.html#module-tarfile" title="tarfile: Read and write tar-format archive files."><code class="xref py py-mod docutils literal notranslate"><span class="pre">tarfile</span></code></a> modules.</p>
|
||
<dl class="function">
|
||
<dt id="shutil.make_archive">
|
||
<code class="descclassname">shutil.</code><code class="descname">make_archive</code><span class="sig-paren">(</span><em>base_name</em>, <em>format</em><span class="optional">[</span>, <em>root_dir</em><span class="optional">[</span>, <em>base_dir</em><span class="optional">[</span>, <em>verbose</em><span class="optional">[</span>, <em>dry_run</em><span class="optional">[</span>, <em>owner</em><span class="optional">[</span>, <em>group</em><span class="optional">[</span>, <em>logger</em><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#shutil.make_archive" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Create an archive file (such as zip or tar) and return its name.</p>
|
||
<p><em>base_name</em> is the name of the file to create, including the path, minus
|
||
any format-specific extension. <em>format</em> is the archive format: one of
|
||
“zip” (if the <a class="reference internal" href="zlib.html#module-zlib" title="zlib: Low-level interface to compression and decompression routines compatible with gzip."><code class="xref py py-mod docutils literal notranslate"><span class="pre">zlib</span></code></a> module is available), “tar”, “gztar” (if the
|
||
<a class="reference internal" href="zlib.html#module-zlib" title="zlib: Low-level interface to compression and decompression routines compatible with gzip."><code class="xref py py-mod docutils literal notranslate"><span class="pre">zlib</span></code></a> module is available), “bztar” (if the <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> module is
|
||
available), or “xztar” (if the <a class="reference internal" href="lzma.html#module-lzma" title="lzma: A Python wrapper for the liblzma compression library."><code class="xref py py-mod docutils literal notranslate"><span class="pre">lzma</span></code></a> module is available).</p>
|
||
<p><em>root_dir</em> is a directory that will be the root directory of the
|
||
archive; for example, we typically chdir into <em>root_dir</em> before creating the
|
||
archive.</p>
|
||
<p><em>base_dir</em> is the directory where we start archiving from;
|
||
i.e. <em>base_dir</em> will be the common prefix of all files and
|
||
directories in the archive.</p>
|
||
<p><em>root_dir</em> and <em>base_dir</em> both default to the current directory.</p>
|
||
<p>If <em>dry_run</em> is true, no archive is created, but the operations that would be
|
||
executed are logged to <em>logger</em>.</p>
|
||
<p><em>owner</em> and <em>group</em> are used when creating a tar archive. By default,
|
||
uses the current owner and group.</p>
|
||
<p><em>logger</em> must be an object compatible with <span class="target" id="index-2"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0282"><strong>PEP 282</strong></a>, usually an instance of
|
||
<a class="reference internal" href="logging.html#logging.Logger" title="logging.Logger"><code class="xref py py-class docutils literal notranslate"><span class="pre">logging.Logger</span></code></a>.</p>
|
||
<p>The <em>verbose</em> argument is unused and deprecated.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.get_archive_formats">
|
||
<code class="descclassname">shutil.</code><code class="descname">get_archive_formats</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#shutil.get_archive_formats" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Return a list of supported formats for archiving.
|
||
Each element of the returned sequence is a tuple <code class="docutils literal notranslate"><span class="pre">(name,</span> <span class="pre">description)</span></code>.</p>
|
||
<p>By default <a class="reference internal" href="#module-shutil" title="shutil: High-level file operations, including copying."><code class="xref py py-mod docutils literal notranslate"><span class="pre">shutil</span></code></a> provides these formats:</p>
|
||
<ul class="simple">
|
||
<li><p><em>zip</em>: ZIP file (if the <a class="reference internal" href="zlib.html#module-zlib" title="zlib: Low-level interface to compression and decompression routines compatible with gzip."><code class="xref py py-mod docutils literal notranslate"><span class="pre">zlib</span></code></a> module is available).</p></li>
|
||
<li><p><em>tar</em>: uncompressed tar file.</p></li>
|
||
<li><p><em>gztar</em>: gzip’ed tar-file (if the <a class="reference internal" href="zlib.html#module-zlib" title="zlib: Low-level interface to compression and decompression routines compatible with gzip."><code class="xref py py-mod docutils literal notranslate"><span class="pre">zlib</span></code></a> module is available).</p></li>
|
||
<li><p><em>bztar</em>: bzip2’ed tar-file (if the <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> module is available).</p></li>
|
||
<li><p><em>xztar</em>: xz’ed tar-file (if the <a class="reference internal" href="lzma.html#module-lzma" title="lzma: A Python wrapper for the liblzma compression library."><code class="xref py py-mod docutils literal notranslate"><span class="pre">lzma</span></code></a> module is available).</p></li>
|
||
</ul>
|
||
<p>You can register new formats or provide your own archiver for any existing
|
||
formats, by using <a class="reference internal" href="#shutil.register_archive_format" title="shutil.register_archive_format"><code class="xref py py-func docutils literal notranslate"><span class="pre">register_archive_format()</span></code></a>.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.register_archive_format">
|
||
<code class="descclassname">shutil.</code><code class="descname">register_archive_format</code><span class="sig-paren">(</span><em>name</em>, <em>function</em><span class="optional">[</span>, <em>extra_args</em><span class="optional">[</span>, <em>description</em><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#shutil.register_archive_format" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Register an archiver for the format <em>name</em>.</p>
|
||
<p><em>function</em> is the callable that will be used to unpack archives. The callable
|
||
will receive the <em>base_name</em> of the file to create, followed by the
|
||
<em>base_dir</em> (which defaults to <a class="reference internal" href="os.html#os.curdir" title="os.curdir"><code class="xref py py-data docutils literal notranslate"><span class="pre">os.curdir</span></code></a>) to start archiving from.
|
||
Further arguments are passed as keyword arguments: <em>owner</em>, <em>group</em>,
|
||
<em>dry_run</em> and <em>logger</em> (as passed in <a class="reference internal" href="#shutil.make_archive" title="shutil.make_archive"><code class="xref py py-func docutils literal notranslate"><span class="pre">make_archive()</span></code></a>).</p>
|
||
<p>If given, <em>extra_args</em> is a sequence of <code class="docutils literal notranslate"><span class="pre">(name,</span> <span class="pre">value)</span></code> pairs that will be
|
||
used as extra keywords arguments when the archiver callable is used.</p>
|
||
<p><em>description</em> is used by <a class="reference internal" href="#shutil.get_archive_formats" title="shutil.get_archive_formats"><code class="xref py py-func docutils literal notranslate"><span class="pre">get_archive_formats()</span></code></a> which returns the
|
||
list of archivers. Defaults to an empty string.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.unregister_archive_format">
|
||
<code class="descclassname">shutil.</code><code class="descname">unregister_archive_format</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="headerlink" href="#shutil.unregister_archive_format" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Remove the archive format <em>name</em> from the list of supported formats.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.unpack_archive">
|
||
<code class="descclassname">shutil.</code><code class="descname">unpack_archive</code><span class="sig-paren">(</span><em>filename</em><span class="optional">[</span>, <em>extract_dir</em><span class="optional">[</span>, <em>format</em><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#shutil.unpack_archive" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Unpack an archive. <em>filename</em> is the full path of the archive.</p>
|
||
<p><em>extract_dir</em> is the name of the target directory where the archive is
|
||
unpacked. If not provided, the current working directory is used.</p>
|
||
<p><em>format</em> is the archive format: one of “zip”, “tar”, “gztar”, “bztar”, or
|
||
“xztar”. Or any other format registered with
|
||
<a class="reference internal" href="#shutil.register_unpack_format" title="shutil.register_unpack_format"><code class="xref py py-func docutils literal notranslate"><span class="pre">register_unpack_format()</span></code></a>. If not provided, <a class="reference internal" href="#shutil.unpack_archive" title="shutil.unpack_archive"><code class="xref py py-func docutils literal notranslate"><span class="pre">unpack_archive()</span></code></a>
|
||
will use the archive file name extension and see if an unpacker was
|
||
registered for that extension. In case none is found,
|
||
a <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a> is raised.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.7: </span>Accepts a <a class="reference internal" href="../glossary.html#term-path-like-object"><span class="xref std std-term">path-like object</span></a> for <em>filename</em> and <em>extract_dir</em>.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.register_unpack_format">
|
||
<code class="descclassname">shutil.</code><code class="descname">register_unpack_format</code><span class="sig-paren">(</span><em>name</em>, <em>extensions</em>, <em>function</em><span class="optional">[</span>, <em>extra_args</em><span class="optional">[</span>, <em>description</em><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#shutil.register_unpack_format" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Registers an unpack format. <em>name</em> is the name of the format and
|
||
<em>extensions</em> is a list of extensions corresponding to the format, like
|
||
<code class="docutils literal notranslate"><span class="pre">.zip</span></code> for Zip files.</p>
|
||
<p><em>function</em> is the callable that will be used to unpack archives. The
|
||
callable will receive the path of the archive, followed by the directory
|
||
the archive must be extracted to.</p>
|
||
<p>When provided, <em>extra_args</em> is a sequence of <code class="docutils literal notranslate"><span class="pre">(name,</span> <span class="pre">value)</span></code> tuples that
|
||
will be passed as keywords arguments to the callable.</p>
|
||
<p><em>description</em> can be provided to describe the format, and will be returned
|
||
by the <a class="reference internal" href="#shutil.get_unpack_formats" title="shutil.get_unpack_formats"><code class="xref py py-func docutils literal notranslate"><span class="pre">get_unpack_formats()</span></code></a> function.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.unregister_unpack_format">
|
||
<code class="descclassname">shutil.</code><code class="descname">unregister_unpack_format</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="headerlink" href="#shutil.unregister_unpack_format" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Unregister an unpack format. <em>name</em> is the name of the format.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="shutil.get_unpack_formats">
|
||
<code class="descclassname">shutil.</code><code class="descname">get_unpack_formats</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#shutil.get_unpack_formats" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Return a list of all registered formats for unpacking.
|
||
Each element of the returned sequence is a tuple
|
||
<code class="docutils literal notranslate"><span class="pre">(name,</span> <span class="pre">extensions,</span> <span class="pre">description)</span></code>.</p>
|
||
<p>By default <a class="reference internal" href="#module-shutil" title="shutil: High-level file operations, including copying."><code class="xref py py-mod docutils literal notranslate"><span class="pre">shutil</span></code></a> provides these formats:</p>
|
||
<ul class="simple">
|
||
<li><p><em>zip</em>: ZIP file (unpacking compressed files works only if the corresponding
|
||
module is available).</p></li>
|
||
<li><p><em>tar</em>: uncompressed tar file.</p></li>
|
||
<li><p><em>gztar</em>: gzip’ed tar-file (if the <a class="reference internal" href="zlib.html#module-zlib" title="zlib: Low-level interface to compression and decompression routines compatible with gzip."><code class="xref py py-mod docutils literal notranslate"><span class="pre">zlib</span></code></a> module is available).</p></li>
|
||
<li><p><em>bztar</em>: bzip2’ed tar-file (if the <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> module is available).</p></li>
|
||
<li><p><em>xztar</em>: xz’ed tar-file (if the <a class="reference internal" href="lzma.html#module-lzma" title="lzma: A Python wrapper for the liblzma compression library."><code class="xref py py-mod docutils literal notranslate"><span class="pre">lzma</span></code></a> module is available).</p></li>
|
||
</ul>
|
||
<p>You can register new formats or provide your own unpacker for any existing
|
||
formats, by using <a class="reference internal" href="#shutil.register_unpack_format" title="shutil.register_unpack_format"><code class="xref py py-func docutils literal notranslate"><span class="pre">register_unpack_format()</span></code></a>.</p>
|
||
</dd></dl>
|
||
|
||
<div class="section" id="archiving-example">
|
||
<span id="shutil-archiving-example"></span><h3>Archiving example<a class="headerlink" href="#archiving-example" title="Permalink to this headline">¶</a></h3>
|
||
<p>In this example, we create a gzip’ed tar-file archive containing all files
|
||
found in the <code class="file docutils literal notranslate"><span class="pre">.ssh</span></code> directory of the user:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">shutil</span> <span class="k">import</span> <span class="n">make_archive</span>
|
||
<span class="gp">>>> </span><span class="kn">import</span> <span class="nn">os</span>
|
||
<span class="gp">>>> </span><span class="n">archive_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s1">'~'</span><span class="p">,</span> <span class="s1">'myarchive'</span><span class="p">))</span>
|
||
<span class="gp">>>> </span><span class="n">root_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s1">'~'</span><span class="p">,</span> <span class="s1">'.ssh'</span><span class="p">))</span>
|
||
<span class="gp">>>> </span><span class="n">make_archive</span><span class="p">(</span><span class="n">archive_name</span><span class="p">,</span> <span class="s1">'gztar'</span><span class="p">,</span> <span class="n">root_dir</span><span class="p">)</span>
|
||
<span class="go">'/Users/tarek/myarchive.tar.gz'</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The resulting archive contains:</p>
|
||
<div class="highlight-shell-session notranslate"><div class="highlight"><pre><span></span><span class="gp">$</span> tar -tzvf /Users/tarek/myarchive.tar.gz
|
||
<span class="go">drwx------ tarek/staff 0 2010-02-01 16:23:40 ./</span>
|
||
<span class="go">-rw-r--r-- tarek/staff 609 2008-06-09 13:26:54 ./authorized_keys</span>
|
||
<span class="go">-rwxr-xr-x tarek/staff 65 2008-06-09 13:26:54 ./config</span>
|
||
<span class="go">-rwx------ tarek/staff 668 2008-06-09 13:26:54 ./id_dsa</span>
|
||
<span class="go">-rwxr-xr-x tarek/staff 609 2008-06-09 13:26:54 ./id_dsa.pub</span>
|
||
<span class="go">-rw------- tarek/staff 1675 2008-06-09 13:26:54 ./id_rsa</span>
|
||
<span class="go">-rw-r--r-- tarek/staff 397 2008-06-09 13:26:54 ./id_rsa.pub</span>
|
||
<span class="go">-rw-r--r-- tarek/staff 37192 2010-02-06 18:23:10 ./known_hosts</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="querying-the-size-of-the-output-terminal">
|
||
<h2>Querying the size of the output terminal<a class="headerlink" href="#querying-the-size-of-the-output-terminal" title="Permalink to this headline">¶</a></h2>
|
||
<dl class="function">
|
||
<dt id="shutil.get_terminal_size">
|
||
<code class="descclassname">shutil.</code><code class="descname">get_terminal_size</code><span class="sig-paren">(</span><em>fallback=(columns</em>, <em>lines)</em><span class="sig-paren">)</span><a class="headerlink" href="#shutil.get_terminal_size" title="Permalink to this definition">¶</a></dt>
|
||
<dd><p>Get the size of the terminal window.</p>
|
||
<p>For each of the two dimensions, the environment variable, <code class="docutils literal notranslate"><span class="pre">COLUMNS</span></code>
|
||
and <code class="docutils literal notranslate"><span class="pre">LINES</span></code> respectively, is checked. If the variable is defined and
|
||
the value is a positive integer, it is used.</p>
|
||
<p>When <code class="docutils literal notranslate"><span class="pre">COLUMNS</span></code> or <code class="docutils literal notranslate"><span class="pre">LINES</span></code> is not defined, which is the common case,
|
||
the terminal connected to <a class="reference internal" href="sys.html#sys.__stdout__" title="sys.__stdout__"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.__stdout__</span></code></a> is queried
|
||
by invoking <a class="reference internal" href="os.html#os.get_terminal_size" title="os.get_terminal_size"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.get_terminal_size()</span></code></a>.</p>
|
||
<p>If the terminal size cannot be successfully queried, either because
|
||
the system doesn’t support querying, or because we are not
|
||
connected to a terminal, the value given in <code class="docutils literal notranslate"><span class="pre">fallback</span></code> parameter
|
||
is used. <code class="docutils literal notranslate"><span class="pre">fallback</span></code> defaults to <code class="docutils literal notranslate"><span class="pre">(80,</span> <span class="pre">24)</span></code> which is the default
|
||
size used by many terminal emulators.</p>
|
||
<p>The value returned is a named tuple of type <a class="reference internal" href="os.html#os.terminal_size" title="os.terminal_size"><code class="xref py py-class docutils literal notranslate"><span class="pre">os.terminal_size</span></code></a>.</p>
|
||
<p>See also: The Single UNIX Specification, Version 2,
|
||
<a class="reference external" href="http://pubs.opengroup.org/onlinepubs/7908799/xbd/envvar.html#tag_002_003">Other Environment Variables</a>.</p>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">New in version 3.3.</span></p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||
<div class="sphinxsidebarwrapper">
|
||
<h3><a href="../contents.html">Table of Contents</a></h3>
|
||
<ul>
|
||
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">shutil</span></code> — High-level file operations</a><ul>
|
||
<li><a class="reference internal" href="#directory-and-files-operations">Directory and files operations</a><ul>
|
||
<li><a class="reference internal" href="#copytree-example">copytree example</a></li>
|
||
<li><a class="reference internal" href="#rmtree-example">rmtree example</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#archiving-operations">Archiving operations</a><ul>
|
||
<li><a class="reference internal" href="#archiving-example">Archiving example</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#querying-the-size-of-the-output-terminal">Querying the size of the output terminal</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<h4>Previous topic</h4>
|
||
<p class="topless"><a href="linecache.html"
|
||
title="previous chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">linecache</span></code> — Random access to text lines</a></p>
|
||
<h4>Next topic</h4>
|
||
<p class="topless"><a href="macpath.html"
|
||
title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">macpath</span></code> — Mac OS 9 path manipulation functions</a></p>
|
||
<div role="note" aria-label="source link">
|
||
<h3>This Page</h3>
|
||
<ul class="this-page-menu">
|
||
<li><a href="../bugs.html">Report a Bug</a></li>
|
||
<li>
|
||
<a href="https://github.com/python/cpython/blob/3.7/Doc/library/shutil.rst"
|
||
rel="nofollow">Show Source
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="clearer"></div>
|
||
</div>
|
||
<div class="related" role="navigation" aria-label="related navigation">
|
||
<h3>Navigation</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="General Index"
|
||
>index</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python Module Index"
|
||
>modules</a> |</li>
|
||
<li class="right" >
|
||
<a href="macpath.html" title="macpath — Mac OS 9 path manipulation functions"
|
||
>next</a> |</li>
|
||
<li class="right" >
|
||
<a href="linecache.html" title="linecache — Random access to text lines"
|
||
>previous</a> |</li>
|
||
<li><img src="../_static/py.png" alt=""
|
||
style="vertical-align: middle; margin-top: -1px"/></li>
|
||
<li><a href="https://www.python.org/">Python</a> »</li>
|
||
<li>
|
||
<span class="language_switcher_placeholder">en</span>
|
||
<span class="version_switcher_placeholder">3.7.4</span>
|
||
<a href="../index.html">Documentation </a> »
|
||
</li>
|
||
|
||
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
|
||
<li class="nav-item nav-item-2"><a href="filesys.html" >File and Directory Access</a> »</li>
|
||
<li class="right">
|
||
|
||
|
||
<div class="inline-search" style="display: none" role="search">
|
||
<form class="inline-search" action="../search.html" method="get">
|
||
<input placeholder="Quick search" type="text" name="q" />
|
||
<input type="submit" value="Go" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
<script type="text/javascript">$('.inline-search').show(0);</script>
|
||
|
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
<div class="footer">
|
||
© <a href="../copyright.html">Copyright</a> 2001-2019, Python Software Foundation.
|
||
<br />
|
||
The Python Software Foundation is a non-profit corporation.
|
||
<a href="https://www.python.org/psf/donations/">Please donate.</a>
|
||
<br />
|
||
Last updated on Jul 13, 2019.
|
||
<a href="../bugs.html">Found a bug</a>?
|
||
<br />
|
||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 2.0.1.
|
||
</div>
|
||
|
||
</body>
|
||
</html> |