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 in 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 in Python exportiertem Modell die Eigenschaft overwriteOutput auf False festgelegt. Um das Überschreiben eines Ausgabe-Dataset 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"):
pass # Additional code
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.
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.
Prozentsatz für 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 Eigenschaft kwlist des Moduls keyword in Python.
- Variablennamen mit inkompatiblen Zeichen wie
Input Features A_ [({*^%$#@!&*,.";:/\werden inInput_Features_A_geändert. Variablenwerte mit inkompatiblen Zeichen werden unverändert beibehalten. Beispiel:Input_Features_A_ = "A_ [({*^%$#@!&*,.\";:/\\". Weisen Sie Datenelementen keine mit Python inkompatiblen Namen wie etwaclass,globalundreturnzu. Eine vollständige Liste der reservierten Schlüsselwörter finden Sie in der Eigenschaftkwlistdes Modulskeywordin Python.
Variablenersetzung
Modelle mit direkter Variablenersetzung werden wie unten angegeben in Python exportiert:
Die direkte Variablenersetzung
Type = '%Name%'in einem Ausdruck-Generator für Werkzeuge wie Layer nach Attributen auswählen wird alswhere_clause=f"Type = '{Name}'"exportiert.Die direkte Variablenersetzung für einen
%Output Workspace%\a- oder%scratchGDB%\b-Workspace wird alsOutputFC = fr"{Output_Workspace}\a"undOutputFC = 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()undisinstance()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.analysis.Statistics(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
In 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.analysis.Buffer(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.analysis.Buffer(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 in 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-Objekts eines Geoverarbeitungswerkzeugs zugewiesen, wie z B.:
output = arcpy.management.JoinField(in_data=infc, in_field="Type", join_table=joinTable, join_field="Type", fields=["Year"])[0]