Für Python-Code erstellen Sie Python-Dateien (.py). Diese Dateien sind ASCII-Dateien, die Python-Anweisungen enthalten.
- Erstellen Sie in der Python-IDE (Integrated Development Environment) Ihrer Wahl ein neues Skript, und fügen Sie diesem oben folgende Zeilen hinzu:
- Einen Eingabe-Workspace, der die zu verarbeitenden Feature-Classes definiert
- Eine Feature-Class, die vom Werkzeug Ausschneiden als Bereich verwendet wird, der aus einer Eingabe-Feature-Class ausgeschnitten werden soll
- Einen Ausgabe-Workspace, in den die Ergebnisse des Werkzeugs Ausschneiden geschrieben werden
- Eine XY-Toleranz, die vom Werkzeug Ausschneiden verwendet wird
- Fügen Sie dem Skript den folgenden Code hinzu, um Variablen zu definieren und auf der Grundlage der vom Benutzer angegebenen Werte festzulegen, die bei der Ausführung an das Skript übergeben werden:
- Fügen Sie dem Skriptfenster die folgende Anweisung zur Fehlerbehandlung und die ArcPy-Funktion ListFeatureClasses() hinzu:
- Fügen Sie den folgenden Code hinzu:
- Fügen Sie zum Vervollständigen des Skriptes die folgenden Zeilen hinzu:
- Fügen Sie am Anfang des Skriptes den folgenden Header hinzu:
- Speichern Sie das Skript.
# Import ArcPy site-package and os modules
import arcpy
import os
Das ArcPy-Site-Paket und das Betriebssystemmodul os werden in das Skript importiert. Das os-Modul bietet einfachen Zugriff auf grundlegende Werkzeuge des Betriebssystems. Einige der Methoden zum Bearbeiten von Dateinamen aus dem os-Modul werden in diesem Skript verwendet.
Dieses Skript enthält die folgenden vier Argumente, sodass es generisch verwendet werden kann:
# Set the input workspace
arcpy.env.workspace = arcpy.GetParameterAsText(0)
# Set the clip featureclass
clipFeatures = arcpy.GetParameterAsText(1)
# Set the output workspace
outWorkspace = arcpy.GetParameterAsText(2)
# Set the XY tolerance
clusterTolerance = arcpy.GetParameterAsText(3)
try:
# Get a list of the featureclasses in the input folder
fcs = arcpy.ListFeatureClasses()
Python erfordert nach bestimmten Anweisungen eine Einrückung des Codes; dies ist integraler Bestandteil der Sprache. Die try-Anweisung definiert den Anfang eines Codeblocks, der durch den zugehörigen Ausnahmehandler (except-Anweisung) behandelt wird. Der gesamte Code in diesem Block muss eingerückt werden. Python behandelt unerwartete Fehler während der Ausführung mit try/except-Blöcken. Ausnahmehandler definieren die Aktionen, die das Programm ausführen soll, wenn eine Ausnahme vom System oder vom Skript selbst ausgelöst wird. Durch die Ausnahmebehandlung kann das Skript außerdem ordnungsgemäß beendet werden und es werden Informationsmeldungen zurückgeben, sodass nicht nur ein Systemfehler generiert wird.
Die ListFeatureClasses()-Funktion gibt eine Liste der Feature-Class-Namen im aktuellen Workspace zurück. Der Workspace definiert den Speicherort der Daten sowie den Ort, an dem alle neuen Daten erstellt werden, wenn kein vollständiger Pfad angegeben ist. Der Workspace wurde bereits auf den Wert des ersten Arguments festgelegt. Die in der Liste enthaltenen Feature-Classes werden mit einer for-Schleife durchlaufen.
for fc in fcs:
# Validate the new feature class name for the output workspace.
featureClassName = arcpy.ValidateTableName(fc, outWorkspace)
outFeatureClass = os.path.join(outWorkspace, featureClassName)
# Clip each feature class in the list with the clip feature class.
# Do not clip the clipFeatures, it may be in the same workspace.
if fc != os.path.basename(clipFeatures):
arcpy.Clip_analysis(fc, clipFeatures, outFeatureClass,
clusterTolerance)
Sobald alle Namen in der Liste durchlaufen wurden, endet die for-Schleife. Mit der ValidateTableName()-Funktion wird sichergestellt, dass der Ausgabename für den Ausgabe-Workspace gültig ist. Bestimmte Zeichen wie Punkte und Bindestriche sind in Geodatabases nicht zulässig. Daher wird von dieser Methode ein Name zurückgegeben, der anstelle von ungültigen Zeichen gültige Zeichen enthält. Außerdem wird ein eindeutiger Name zurückgegeben, sodass keine vorhandenen Daten überschrieben werden.
Mit der os.path.basename-Methode wird der Pfad der Clip-Feature-Classes bearbeitet, sodass in einem Ausdruck nur der Name der Feature-Class und nicht der gesamte Pfad ausgewertet wird. Auf das Werkzeug Ausschneiden wird als ArcPy-Funktion zugegriffen, wobei die verschiedenen Zeichenfolgenvariablen als Parameterwerte verwendet werden.
except Exception as err:
arcpy.AddError(err)
print err
Die except-Anweisung ist aufgrund der try-Anweisung erforderlich. Andernfalls tritt ein Syntaxfehler auf. Wenn während der Ausführung ein Fehler auftritt, wird der Code im except-Block ausgeführt. Alle Fehlermeldungen werden mit der Funktion AddError() hinzugefügt, falls das Skript über ein Skriptwerkzeug ausgeführt wird. Wenn das Skript außerhalb eines Werkzeugs ausgeführt wird, werden alle Fehlermeldungen außerdem in die Standardausgabe geschrieben.
"""-----------------------------------------------------------------------------
Script Name: Clip Multiple Feature Classes
Description: Clips one or more shapefiles
from a folder and places the clipped
feature classes into a geodatabase.
Created By: Insert name here.
Date: Insert date here.
-----------------------------------------------------------------------------"""
Fertiges Skript:
"""-----------------------------------------------------------------------------
Script Name: Clip Multiple Feature Classes
Description: Clips one or more shapefiles
from a folder and places the clipped
feature classes into a geodatabase.
Created By: Insert name here.
Date: Insert date here.
-----------------------------------------------------------------------------"""
# Import ArcPy site-package and os modules
import arcpy
import os
# Set the input workspace
arcpy.env.workspace = arcpy.GetParameterAsText(0)
# Set the clip featureclass
clipFeatures = arcpy.GetParameterAsText(1)
# Set the output workspace
outWorkspace = arcpy.GetParameterAsText(2)
# Set the XY tolerance
clusterTolerance = arcpy.GetParameterAsText(3)
try:
# Get a list of the featureclasses in the input folder
fcs = arcpy.ListFeatureClasses()
for fc in fcs:
# Validate the new feature class name for the output workspace.
featureClassName = arcpy.ValidateTableName(fc, outWorkspace)
outFeatureClass = os.path.join(outWorkspace, featureClassName)
# Clip each feature class in the list with the clip feature class.
# Do not clip the clipFeatures, it may be in the same workspace.
if fc != os.path.basename(clipFeatures):
arcpy.Clip_analysis(fc, clipFeatures, outFeatureClass,
clusterTolerance)
except Exception as err:
arcpy.AddError(err)
print err