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