Auflisten von Feature-Classes in mehreren Geodatabases in Ordnern mit ArcPy?

11

Ich habe einen Ordner mit zahlreichen Geodatabases. Innerhalb der Geodatabases befinden sich Feature-Classes. Ich möchte eine Liste der Feature-Classes in diesen Geodatabases mithilfe eines Python-Skripts erhalten. Ich bin nur so weit gekommen, die Geodatabases aufzulisten. Hat jemand einen Vorschlag zur Auflistung der Feature-Classes in den Geodatabases?

Die Druckelementzeile in meinem Skript gibt mir die folgenden Ergebnisse:

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

Ich möchte eine Liste der Feature-Classes in den obigen Geodatabases erstellen. Unten ist mein Skript bis jetzt.

    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
quelle
1
Gibt es auch Feature-Datensätze in den Geodatabases?
blah238
Nein, keine Feature-Datensätze.
Patty Jula

Antworten:

14

Der Trick, den Sie vermissen, besteht darin, jede GDB zum aktiven Arbeitsbereich zu machen, bevor Sie den Inhalt auflisten:

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

Beachten Sie auch, dass hierdurch Feature-Classes in Feature-Datasets fehlen. Weitere Informationen finden Sie unter Auflisten aller Feature-Classes in der Datei-Geodatabase, auch in Feature-Datasets. um das zu lösen.

Im Allgemeinen müssen Sie bei Verwendung rnicht alles doppelt verdoppeln (erleichtert das Kopieren und Einfügen aus der Adressleiste des Windows-Explorers usw.): zr'D:\output'

matt wilkie
quelle
1
Cool, das hat funktioniert! Ich habe ein paar andere Tools von dem, was Sie auch geteilt haben, aufgegriffen - wusste nicht, dass ich env.workspace so verwenden kann. Vielen Dank!
Patty Jula
1
@ PattyJula Gern geschehen Patty. Außerdem ist es im Allgemeinen besser, generische Wörter wie "item" zu vermeiden, da dies für alles gelten kann und in größeren Skripten verwirrend wird. Es ist einfacher, sich an die Unterscheidung zwischen Singular und Plural zu erinnern - obwohl Sie sich selbst trainieren müssen, um auf die nachfolgenden s zu achten . Ich benutze Abkürzungen, um bei letzterem zu helfen. Zum Beispiel for wspace in workspaces:und for fc in featureclasses:.
Matt Wilkie
8

Dieses Skript behandelt alle vorhandenen Feature-Datasets (zumindest theoretisch - ich habe es nicht getestet). Dieselbe allgemeine Idee: Wenn es Feature-Datasets gibt, müssen Sie Ihr Arbeitsverzeichnis auf dieses Dataset einstellen, bevor Sie die Features darin auflisten.

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
quelle
1
+1 für Kommentare und die Integration von FDs. Ich persönlich würde 'temp' nicht als Variablennamen verwenden, da die Bedeutungen "wegwerfen" und "frei löschen" zugeordnet sind. Die Variable ist verwerfbar, der Inhalt, die Datenbanken, jedoch wahrscheinlich nicht. In diesem Fall ist dies in jedem Fall nicht arcpy.env.workspace = gdberforderlich. Verwenden Sie es einfach, da ListWorkspaces den vollständigen Pfad zurückgibt. ;-)
Matt Wilkie
Du hast vollkommen recht, Matt. Ich werde das Beispiel zur späteren Bezugnahme aktualisieren. Außerdem habe ich am Ende eine Zeile vergessen, die den Arbeitsbereich auf die übergeordnete GDB zurücksetzt, bevor ich versucht habe, zum nächsten Feature-Dataset zu wechseln (obwohl dies in diesem Fall nicht erforderlich ist).
Jason