Erstellen eines neuen Python-Skripts

Für Python-Code erstellen Sie Python-Dateien (.py). Diese Dateien sind ASCII-Dateien, die Python-Anweisungen enthalten.

Schritte:
  1. Erstellen Sie in der Python-IDE (Integrated Development Environment) Ihrer Wahl ein neues Skript, und fügen Sie diesem oben folgende Zeilen hinzu:
  2. # 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:

    • 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
  3. 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:
  4. # 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)
    
  5. Fügen Sie dem Skriptfenster die folgende Anweisung zur Fehlerbehandlung und die ArcPy-Funktion ListFeatureClasses() hinzu:
  6. 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.

  7. Fügen Sie den folgenden Code hinzu:
  8. 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.

  9. Fügen Sie zum Vervollständigen des Skriptes die folgenden Zeilen hinzu:
  10. 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.

  11. Fügen Sie am Anfang des Skriptes den folgenden Header hinzu:
  12. """-----------------------------------------------------------------------------
      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.
    -----------------------------------------------------------------------------"""
    
  13. Speichern Sie das Skript.
  14. HinweisHinweis:

    Beachten Sie beim Benennen von Variablen, dass in Python die Groß- und Kleinschreibung relevant ist. clipFeatures ist daher nicht identisch mit ClipFeatures.

    HinweisHinweis:

    GetParameterAsText() wird zum Empfangen von Argumenten verwendet. Wenn ein Skript definierte Dataset-Namen und Parameterwerte verwendet, benötigt es die GetParameterAsText()-Funktion ggf. nicht.

    HinweisHinweis:

    Mit einem Doppelpunkt endende Anweisungen geben den Anfang von eingezogenem Code an. In Python werden keine geschweiften oder eckigen Klammern und Semikolons verwendet, um den Anfang oder das Ende eines Codeblocks anzugeben. Stattdessen werden in Python die Begrenzungen eines Blocks durch die Einrückung definiert. Dadurch erhalten Sie Code, der einfach gelesen und verfasst werden kann.

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

Verwandte Themen

5/9/2014