Elencare le classi di caratteristiche in più geodatabase nella cartella usando ArcPy?


11

Ho una cartella con numerosi geodatabase in esso. All'interno dei geodatabase sono presenti classi di caratteristiche. Vorrei ottenere un elenco delle classi di caratteristiche in questi geodatabase usando uno script Python. Sono arrivato solo a elencare i database geografici. Qualcuno ha un suggerimento per elencare le classi di caratteristiche nei geodatabase?

La riga dell'elemento di stampa nel mio script mi ​​dà i seguenti risultati:

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

Voglio generare un elenco delle classi di caratteristiche nei database geodetici sopra. Di seguito è la mia sceneggiatura finora.

    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

1
Esistono anche set di dati delle funzionalità all'interno dei database geografici?
blah238,

No, nessun set di dati di funzionalità.
Patty Jula,

Risposte:


14

Il trucco che ti manca è rendere ogni gdb lo spazio di lavoro attivo prima di elencare i contenuti:

for item in workspaces:
    print item
    env.workspace = item
    fcs = arcpy.ListFeatureClasses()
    for fc in fcs:
        print '\t', fc

Si noti inoltre che questo mancherà di una classe di funzionalità all'interno dei set di dati delle funzionalità, vedere Elenco di tutte le classi di funzionalità nel File Geodatabase, incluso nei set di dati delle funzionalità? per risolverlo.

Più in generale, se si utilizza rnon è necessario raddoppiare la barra rovesciata di tutto (semplifica la copia e incolla dalla barra degli indirizzi di Windows Explorer ecc.): Ad es.r'D:\output'


1
Bene, ha funzionato! Ho preso alcuni altri strumenti da quello che hai condiviso anche tu - non sapevo che avrei potuto usare env.workspace in quel modo. Grazie!
Patty Jula,

1
@PattyJula Prego Patty. Inoltre è generalmente meglio evitare parole generiche come 'item' in quanto potrebbe applicarsi a qualsiasi cosa e negli script più grandi diventa confuso. E 'più facile da tenere a mente al singolare> plurale distinzione - anche se si ha bisogno allenarsi a guardare per il finale s . Uso le abbreviazioni per aiutare con quest'ultima. Ad esempio for wspace in workspaces:e for fc in featureclasses:.
matt wilkie,

8

Questo script tratterà qualsiasi set di dati di funzionalità esistente (almeno in teoria - non l'ho testato). Stessa idea generale, tuttavia, se sono presenti set di dati delle funzionalità, è necessario impostare la directory di lavoro su quel set di dati prima di elencare le funzionalità all'interno.

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

1
+1 per commenti e FD integrativi. Personalmente non userei 'temp' come nome variabile a causa dei significati associati di "buttare via" e "libero di cancellare". La variabile è scartabile, ma probabilmente non è il contenuto, i database. In ogni caso, in questo caso non è necessario, basta usare arcpy.env.workspace = gdbcome ListWorkspaces restituisce il percorso completo. ;-)
matt wilkie

Hai perfettamente ragione, Matt. Aggiornerò l'esempio per riferimento futuro. Inoltre, ho dimenticato una riga alla fine che reimposta lo spazio di lavoro sul GDB padre prima di provare a passare al successivo set di dati delle funzionalità (anche se in questo caso non è necessario).
Jason,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.