I'm trying to perform some geoprocessing. My task is to locate all shapefiles within a directory, and then find the full path name for that shapefile within the directory. I can get the name of the shapefile, but I don't know how to get the full path name for that shapefile.
shpfiles = []
for path, subdirs, files in os.walk(path):
for x in files:
if x.endswith(".shp") == True:
shpfiles.append[x]
os.walk
gives you the path to the directory as the first value in the loop, just use os.path.join()
to create full filename:
shpfiles = []
for dirpath, subdirs, files in os.walk(path):
for x in files:
if x.endswith(".shp"):
shpfiles.append(os.path.join(dirpath, x))
I renamed path
in the loop to dirpath
to not conflict with the path
variable you already were passing to os.walk()
.
Note that you do not need to test if the result of .endswith() == True
; if
already does that for you, the == True
part is entirely redundant.
You can use .extend()
and a generator expression to make the above code a little more compact:
shpfiles = []
for dirpath, subdirs, files in os.walk(path):
shpfiles.extend(os.path.join(dirpath, x) for x in files if x.endswith(".shp"))
or even as one list comprehension:
shpfiles = [os.path.join(d, x)
for d, dirs, files in os.walk(path)
for x in files if x.endswith(".shp")]