擅长:python、mysql、java
<p><code>os.walk</code>将目录路径作为循环中的第一个值,只需使用<code>os.path.join()</code>创建完整文件名:</p>
<pre><code>shpfiles = []
for dirpath, subdirs, files in os.walk(path):
for x in files:
if x.endswith(".shp"):
shpfiles.append(os.path.join(dirpath, x))
</code></pre>
<p>我将循环中的<code>path</code>重命名为<code>dirpath</code>,以与您已经传递给<code>os.walk()</code>的<code>path</code>变量不冲突。</p>
<p>请注意,不需要测试<code>.endswith() == True</code>;<code>if</code>的结果是否已经为您完成了这项工作,<code>== True</code>部分是完全多余的。</p>
<p>您可以使用<code>.extend()</code>和生成器表达式使上述代码更紧凑一些:</p>
<pre><code>shpfiles = []
for dirpath, subdirs, files in os.walk(path):
shpfiles.extend(os.path.join(dirpath, x) for x in files if x.endswith(".shp"))
</code></pre>
<p>甚至作为一个列表理解:</p>
<pre><code>shpfiles = [os.path.join(d, x)
for d, dirs, files in os.walk(path)
for x in files if x.endswith(".shp")]
</code></pre>