Solución:
El truco que se está perdiendo es hacer que cada gdb sea el espacio de trabajo activo antes de enumerar el contenido:
for item in workspaces:
print item
env.workspace = item
fcs = arcpy.ListFeatureClasses()
for fc in fcs:
print 't', fc
También tenga en cuenta que esto perderá una clase de entidad dentro de los datasets de entidades, consulte Listar todas las clases de entidades en la geodatabase de archivos, incluso dentro de los datasets de entidades. para resolver eso.
De manera más general, si usa r
no necesita doble barra invertida en todo (facilita copiar y pegar desde la barra de direcciones del explorador de Windows, etc.): p. r'D:output'
Este script se ocupará de cualquier conjunto de datos de características existente (al menos en teoría, no lo he probado). Sin embargo, la misma idea general es que si hay conjuntos de datos de características, debe configurar su directorio de trabajo en ese conjunto de datos antes de enumerar las características dentro.
import arcpy
dir = r'D:output'
arcpy.env.workspace = dir
gdbList = arcpy.ListWorkspaces('*','FileGDB')
for gdb in gdbList:
arcpy.env.workspace = gdb #--change working directory to each GDB in list
datasetList = arcpy.ListDatasets('*','Feature') #--make a list of all (if any) feature datasets that exist in current GDB
fcList = arcpy.ListFeatureClasses() #--make a list of all feature in current GDB (root)
for fc in fcList:
print arcpy.env.workspace,fc #--print directory,fc name
for dataset in datasetList:
arcpy.env.workspace = dataset #--change working directory to each dataset (if any) in list
fcList = arcpy.ListFeatureClasses() #--make a list of all feature in current GDB (current dataset)
for fc in fcList:
print arcpy.env.workspace,fc #--print directory,fc name
arcpy.env.workspace = gdb