Exportieren eines Modells in Python

Das Exportieren eines Modells in ein Python-Skript kann Ihnen helfen, die Verwendung von Werkzeugen und Umgebungen in Python besser zu verstehen. Um ein Modell nach Python zu exportieren, klicken Sie auf dem Menüband ModelBuilder auf die Schaltfläche Exportieren, und wählen Sie eine der folgenden Optionen aus:

  • In Python-Datei exportieren
  • An Python-Fenster senden

Mit beiden Optionen wird der gleiche Python-Code erstellt. Der Code kann weiter bearbeitet und als eigenständiges Python-Skript verwendet werden oder so geändert werden, dass er als Skriptwerkzeug funktioniert.

Überlegungen für den Export von Modellen in Python

Beim Exportieren eines Modells in ein Python-Skript werden einige Überlegungen zur Anpassung des Modells an den Python-Code angestellt. Im folgenden Abschnitt werden einige dieser Überlegungen beschrieben.

Überschreiben

Standardmäßig ist bei einem nach Python exportiertem Modell die Eigenschaft overwriteOutput auf False festgelegt. Um das Überschreiben eines Ausgabedatensatzes zu ermöglichen, legen Sie die Eigenschaft arcpy.env.overwriteOutput auf True fest.

Codeorganisation

Bei Verwendung eines exportierten Skriptes wird ein Modell als Funktion exportiert, und die Parameterwerte werden als Argumente übergeben. Siehe hierzu folgende Beispiele:

def Model(InputFC=r"C:\Data.gdb\inFC", Output="C:\Output.gdb\outFC", Extent="1186925.51155726 -2378062.72079588 1240005.19719053 -2315230.04252389", Name="Canada Goose"):

Wenn das Modell untergeordnete Modelle enthält, werden deren Inhalte in getrennte Ordner exportiert. In der primären Python-Datei wird die Python-Datei des untergeordneten Modells während der Codeausführung korrekt importiert und aufgerufen.

Erweiterungen

Die Funktion CheckOutExtension wurde für Werkzeuge mit Erweiterungsanforderungen hinzugefügt.

Layer und Tabellensichten

Falls im Modell Layer oder Tabellensichten verwendet werden, die nicht im Modell erstellt wurden, müssen Sie diese Layer bzw. Tabellensichten im Skript erstellen. Hierfür können Sie Werkzeuge wie Feature-Layer erstellen und Tabellensicht erstellen verwenden.

Validierung

Datenelemente im Modell werden im Python-Skript in Variablen konvertiert. Variablennamen mit inkompatiblen Zeichen wie [({*^%$#@!&*,.";:/\ werden überprüft, um die inkompatiblen Zeichen auszuschließen. Variablenwerte mit inkompatiblen Zeichen werden unverändert beibehalten. Weisen Sie Datenelementen keine in Python reservierten Schlüsselwörter wie etwa class, global und return zu. Eine vollständige Liste der reservierten Schlüsselwörter finden Sie in der kwlist-Eigenschaft des keyword-Moduls in Python.

  • Variablennamen mit inkompatiblen Zeichen wie Input Features A_ [({*^%$#@!&*,.";:/\ werden in Input_Features_A_ geändert. Variablenwerte mit inkompatiblen Zeichen werden unverändert beibehalten wie Input_Features_A_ = "A_ [({*^%$#@!&*,.\";:/\\". Weisen Sie Datenelementen keine mit Python inkompatiblen Namen wie etwa class, global und return zu. Eine vollständige Liste der reservierten Schlüsselwörter finden Sie in der kwlist-Eigenschaft des keyword-Moduls in Python.

Variablenersetzung

Modelle mit direkter Variablenersetzung werden wie unten angegeben in Python exportiert:

  • Die direkte Variablenersetzung Typ = '%Name%' in einem Ausdruck-Generator für Werkzeuge wie Layer nach Attributen auswählen wird als where_clause=f"Type = '{Name}'" exportiert.
  • Die direkte Variablenersetzung für einen %Output Workspace%\a- oder %scratchGDB%\b-Workspace wird als OutputFC = fr"{Output_Workspace}\a" und OutputFC = fr"{arcpy.env.scratchGDB}\b" exportiert.
  • Die direkte Ersetzung von Systemvariablen wie %n% und %i%, wird als Zeichenfolge übergeben.
  • Eine Variable mit direkter Variablenersetzung, die als Modelparameter festgelegt ist, wird mit den integrierten Python-Funktionen locals(), globals() und isinstance() ausgewertet, wenn sie in Python exportiert wird, Beispiel:
    arcpy.analysis.Buffer(in_features=_Name_.__str__().format(**locals(),**globals())if isinstance(_Name_, str) else _Name_, out_feature_class=Name_Buffer, buffer_distance_or_field="10 Meters")

Datentypen

Datentypen im Modell werden beim Exportieren in Python wie folgt zugeordnet:

  • Die Werte der Modellvariablen vom Datentyp "Zeichenfolge", "Long", "Double" und "Boolean" werden Python-Datentypen zugeordnet. Alle anderen Datentypwerte werden in Python als Zeichenfolgen zugeordnet.
  • Parameterwerte der Wertetabelle werden als Liste zugeordnet, Beispiel:
    arcpy.Statistics_analysis(in_table=a, out_table=b, statistics_fields=[["Type", "COUNT"], ["Year", "COUNT"]], case_field=["Type"])
  • Feldzuordnungsparameter wie der Parameter Feldzuordnung des Werkzeugs Anhängen werden wie folgt in eine durch Semikolon getrennte Zeichenfolge konvertiert:
    field_mapping="Type \"Type\" true true false 20 Text 0 0,First,#,InputFC,Type,0,20;Year \"Year\" true true false 2 Short 0 0,First,#,InputFC,Year,-1,-1)

Umgebungen

Nach Python werden für die Anwendung, das Modell und das Werkzeug nur die Umgebungseinstellungen exportiert, deren Standardwert geändert wurde. Das exportierte Skript legt Umgebungen mit der EnvManager-Klasse innerhalb eines with-Blocks fest; die Umgebungseinstellungswerte sind temporär und werden nur für die Dauer des with-Blocks festgelegt.

import arcpy

def GnatcatcherHabitat():  # Gnatcatcher Habitat

    # Model Environment settings
    with arcpy.EnvManager(extent="3434731.64703611 -1534445.99025604 3485825.15860115 -1466080.56806995")

        # Process: Buffer (Buffer) 
        with arcpy.EnvManager(extent="1187538.76766617 -2377527.90888239 1230418.76331601 -2319961.0344503")
            arcpy.Buffer_analysis(in_features=r"C:\Data.gdb\A", out_feature_class=r"C:\Output.gdb\B", buffer_distance_or_field="500 Meters", line_side="FULL", line_end_type="ROUND", dissolve_option="NONE",dissolve_field=[], method="PLANAR")

if __name__ == '__main__':
    # Global Environment settings
    with arcpy.EnvManager(scratchWorkspace=r"C:\Output.gdb\", workspace=r"C:\Data.gdb\"):
        GnatcatcherHabitat()

Modellieren von Fließvorgängen

  • Modellvoraussetzungen werden in einen If-Block konvertiert:
    if a and b:
        arcpy.Buffer_analysis(in_features=inFC, out_feature_class=outFC, buffer_distance_or_field="10 Meters", line_side="FULL", line_end_type="ROUND", dissolve_option="NONE", dissolve_field=[], method="PLANAR")
  • Feedback-Schleifen des Modells werden in den Skriptablauf übertragen.

Modellwerkzeuge

Modellwerkzeuge der Kategorien Iteratoren, Dienstprogramme oder Logisch werden nicht nach Python exportiert. Sie müssen die entsprechenden Python-Funktionen dieser Werkzeuge hinzufügen. Beispielsweise müssen Sie für die bedingte Verzweigung im Skript If/Else-Logik verwenden.

Abgeleitete Ausgaben

Abgeleitete Ausgabewerte werden Variablen durch Indizierung eines Result-Objektes eines Geoverarbeitungswerkzeugs zugewiesen, wie z B.:

output = arcpy.JoinField_management(in_data=infc, in_field="Type", join_table=joinTable, join_field="Type", fields=["Year"])[0]