Arcpy – How to Count Feature Classes in Geodatabase

arcgis-desktoparcpyspatial-database

I would like to count the number of feature classes in a geodatabase. Some of the classes are in feature datasets as well. I have tried get count management, but that returns the number of rows in each feature class in the GDB.

Best Answer

The arcpy.da.Walk() method is the 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)

enter image description here