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た変数と競合しないように名前を変更しました。pathos.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"))
または、1 つのリスト内包表記としても:
shpfiles = [os.path.join(d, x)
for d, dirs, files in os.walk(path)
for x in files if x.endswith(".shp")]