<p>是:使用Python 3.5(它目前仍然是RC,但是<a href="http://legacy.python.org/dev/peps/pep-0478/" rel="noreferrer">should be out momentarily</a>)。在Python 3.5中,<code>os.walk</code>被重写以提高效率。</p>
<p>这项工作是<a href="https://www.python.org/dev/peps/pep-0471" rel="noreferrer">PEP 471</a>的一部分。</p>
<p>摘自政治公众人物:</p>
<blockquote>
<p>Python's built-in <code>os.walk()</code> is significantly slower than it needs to
be, because -- in addition to calling <code>os.listdir()</code> on each directory
-- it executes the <code>stat()</code> system call or <code>GetFileAttributes()</code> on each file to determine whether the entry is a directory or not.</p>
<p>But the underlying system calls -- <code>FindFirstFile</code> / <code>FindNextFile</code> on
Windows and <code>readdir</code> on POSIX systems -- already tell you whether the
files returned are directories or not, so no further system calls are
needed. Further, the Windows system calls return all the information
for a <code>stat_result</code> object on the directory entry, such as file size and
last modification time.</p>
<p>In short, you can reduce the number of system calls required for a
tree function like <code>os.walk()</code> from approximately 2N to N, where N is
the total number of files and directories in the tree. (And because
directory trees are usually wider than they are deep, it's often much
better than this.)</p>
<p>In practice, removing all those extra system calls makes <code>os.walk()</code>
<strong>about 8-9 times as fast on Windows</strong>, and <strong>about 2-3 times as fast on
POSIX systems</strong>. So we're not talking about micro-optimizations. See
more benchmarks here.</p>
</blockquote>