<p>在我的机器上运行,<code>os.walk()</code>确实显示了所有sym链接:</p>
<pre><code>>>> os.walk("foo").next()
('foo', ['tetex', 'latex'], ['mozilla', 'firefox'])
>>> os.walk("foo", followlinks=False).next()
('foo', ['tetex', 'latex'], ['mozilla', 'firefox'])
</code></pre>
<p>我在这里看到的唯一问题是sym链接出现在目录列表中,而不是文件列表中。在</p>
<p>在大多数用例中,这将是预期的行为,因为人们希望能够将文件列表中的所有条目视为文件,而不必检查它是否是sym链接。在</p>
<p><a href="http://python.6.n6.nabble.com/os-walk-with-followlinks-False-td3559133.html" rel="nofollow">This thread from python-dev</a>简要讨论这个问题。在</p>
<blockquote>
<p>"... putting the symlinks-to-directories
into the files list instead of the subdirectory list isn't really any
better (it just moves the problem to different use cases, such as
those that actually want to read the file contents)."</p>
</blockquote>
<p>从<a href="http://bugs.python.org/issue13734" rel="nofollow">linked issue page</a>:</p>
<blockquote>
<p>"For example to count the number of lines of all the files under a
directory, a code could go like this:</p>
<pre><code>for root, dirs, files in os.walk(top):
for file in files:
f = open(file)
for n, l in enumerate(f, 1):
pass
print(file, n)
</code></pre>
<p>If, suddently, a symlink to a directory appeared in files, this will
break. So I'm not convinced it's worth changing this. A symlink to a
directory is not much closer to a file than to a directory, it really
depends on the use case."</p>
</blockquote>