¿Listado de clases de entidad en múltiples geodatabases en la carpeta usando ArcPy?

11

Tengo una carpeta con numerosas geodatabases en ella. Dentro de las geodatabases hay clases de entidad. Me gustaría obtener una lista de las clases de entidad en estas geodatabases utilizando un script Python. Solo he llegado a enumerar las geodatabases. ¿Alguien tiene una sugerencia para enumerar las clases de entidad en las geodatabases?

La línea de elementos de impresión en mi script me da los siguientes resultados:

C:\output\data.gdb 
C:\output\otherdata.gdb
C:\output\somethingelse.gdb

Quiero generar una lista de las clases de entidad en las geodatabases anteriores. A continuación se muestra mi guión hasta ahora.

    import arcpy, os, sys
    from arcpy import env

    arcpy.env.workspace = "D:\\output"
    inWorkspace = arcpy.env.workspace

    workspaces = arcpy.ListWorkspaces("*", "FileGDB")
    for item in workspaces:
         print item #This part gives me the print statements I shared above
    # fcList = arcpy.ListFeatureClasses() #I haven't figured this part out
    #I want to list the feature classes in the geodatabases
Patty Jula
fuente
1
¿Existen también conjuntos de datos de características dentro de las geodatabases?
blah238
No, no hay conjuntos de datos de características.
Patty Jula

Respuestas:

14

El truco que te estás perdiendo es hacer que cada gdb sea el espacio de trabajo activo antes de enumerar los contenidos:

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 conjuntos de datos de entidad, consulte ¿ Listado de todas las clases de entidad en la Geodatabase de archivos, incluso dentro de los conjuntos de datos de entidad? para resolver eso

En términos más generales, si lo usa r, no necesita duplicar la barra diagonal inversa (facilita la copia y el pegado desde la barra de direcciones del explorador de Windows, etc.): por ejemplor'D:\output'

wilkie mate
fuente
1
Genial, eso funcionó! Recogí algunas otras herramientas de lo que compartiste también; no sabía que podía usar env.workspace de esa manera. ¡Gracias!
Patty Jula
1
@ PattyJula De nada Patty. Además, generalmente es mejor evitar palabras genéricas como 'elemento', ya que podría aplicarse a cualquier cosa y en los scripts más grandes se vuelve confuso. Es más fácil tener en cuenta la distinción singular-> plural, aunque es necesario entrenarse para estar atento a los s finales . Utilizo abreviaturas para ayudar con esto último. Por ejemplo for wspace in workspaces:y for fc in featureclasses:.
Matt Wilkie
8

Este script se ocupará de cualquier conjunto de datos de características existentes (al menos en teoría, no lo he probado). Sin embargo, la misma idea general, si hay conjuntos de datos de características, debe establecer 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
Jason
fuente
1
+1 para comentarios e integración de FD. Yo personalmente no usaría 'temp' como nombre de variable debido a sus significados asociados de "tirar" y "libre de borrar". La variable es descartable, pero su contenido, las bases de datos, probablemente no. En cualquier caso, en este caso es innecesario, solo use arcpy.env.workspace = gdbcomo ListWorkspaces devuelve la ruta completa. ;-)
matt wilkie
Tienes toda la razón, Matt. Actualizaré el ejemplo para referencia futura. Además, olvidé una línea al final que restablece el espacio de trabajo al GDB principal antes de intentar pasar al siguiente conjunto de datos de características (aunque no es necesario en este caso).
Jason