ThisThe arcpy.da.Walk() method is what I usethe way to go:
import arcpy, os
workspace = r"C:\Users\OWNER\Documents\ArcGIS\Default.gdb"
feature_classes = []
for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,
datatype="FeatureClass",
type="Any"):
for filename in filenames:
feature_classes.append(os.path.join(dirpath, filename))
print "There are %s featureclasses in the workspace" % len(feature_classes)
The main operators here are arcpy.da.Walk
and len()
. arcpy.da.Walk
simply walks through folders and subfolders and collects files of datatype="FeatureClass"
using feature_classes.append(os.path.join(dirpath, filename))
. Finally, len()
is used to count the number of files in the feature_classes = []
list.
EDIT:
From a benchmark standpoint and in the interest of science, it appears that arcpy.da.Walk method is significantly faster than the other approach. I tested them on a FGDB with 7 FDS and 35 FC's. Here are the results:
import arcpy, os, time
###########################################################################
# METHOD 1
start = time.clock()
workspace = r"C:\Users\OWNER\Documents\ArcGIS\Default.gdb"
feature_classes = []
for dirpath, dirnames, filenames in arcpy.da.Walk(workspace, datatype="FeatureClass", type="Any"):
for filename in filenames:
feature_classes.append(os.path.join(dirpath, filename))
print "There are %s featureclasses in the workspace" % len(feature_classes)
end = time.clock()
method1 = (end - start)
############################################################################
# Method 2
start = time.clock()
arcpy.env.workspace = r"C:\Users\OWNER\Documents\ArcGIS\Default.gdb"
# Get stand alone FCs
fccount = len(arcpy.ListFeatureClasses("",""))
# Get list of Feature Datasets and loop through them
fds = arcpy.ListDatasets("","")
for fd in fds:
oldws = arcpy.env.workspace
arcpy.env.workspace = oldws + "\\" + fd
fccount = fccount + len(arcpy.ListFeatureClasses("",""))
arcpy.env.workspace = oldws
print fccount
end = time.clock()
method2 = (end - start)
##########################################################################
print 'method1 completed in %s seconds; method2 completed in %s seconds' % (method1, method2)