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")]