Erstellen eines neuen Python-Skripts

Für Python-Code erstellen Sie Python-Dateien (.py). Diese Dateien sind ASCII-Dateien, die Python-Anweisungen enthalten. Bei den unten angegebenen Schritten wird angenommen, dass Sie die PythonWin-Anwendung wie unter Writing_Python_scripts beschrieben verwenden.

Schritte:
  1. Klicken Sie in PythonWin im Menü File auf New. Übernehmen Sie die Standardoption Python Script, und klicken Sie auf OK.
  2. Das Fenster "Script1" wird geöffnet. "Script1" ist der Standardname für das Skript.

  3. Klicken Sie im Fenster "Script1" auf die Schaltfläche Maximize.
  4. Klicken Sie im Menü File auf Save As. Geben Sie dem Skript den Namen multi_clip.py, und speichern Sie es im gewünschten Ordner.
  5. Fügen Sie am Anfang des Skriptes die folgenden Zeilen hinzu:
  6. # Import ArcPy site-package and os modules
    #
    import arcpy 
    import os
    

    Das ArcPy-Site-Paket und das Betriebssystemmodul os wird 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

      Ausführliche Informationen zur Funktionsweise des Werkzeugs Ausschneiden finden Sie unter Ausschneiden in der Toolbox "Analysis".

  7. 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:
  8. # 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)
    
  9. Fügen Sie dem Skriptfenster die folgende Fehlerbehandlungsanweisung und die ArcPy-Funktion ListFeatureClasses() hinzu:
  10. 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. Es empfiehlt sich, die Ausnahmebehandlung in allen Skripten zu verwenden, für die der Geoprozessor genutzt wird, sodass dessen Fehlermeldungen an den Benutzer zurückgegeben werden können. Dadurch kann das Skript ordnungsgemäß beendet werden und Informationsmeldungen zurückgeben, sodass nicht nur ein Systemfehler generiert wird.

    Die ListFeatureClasses()-Funktion gibt eine Python-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. Eine Python-Liste ist ein vielseitig verwendbares Objekt. Die in der Liste enthaltenen Feature-Classes werden mit einer FOR-Schleife durchlaufen.

  11. Fügen Sie den folgenden Code hinzu:
  12.     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 basename-Methode von os.path 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.

  13. Fügen Sie zum Vervollständigen des Skriptes die folgenden Zeilen hinzu:
  14. except:
        arcpy.AddMessage(arcpy.GetMessages(2))
        print arcpy.GetMessages(2)
    

    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 Meldungen mit dem Wichtigkeitsgrad 2 (Fehler) werden 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.

  15. Fügen Sie am Anfang des Skriptes die folgenden Kommentare hinzu:
  16. # 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.
    
  17. Speichern Sie das Skript, indem Sie auf der PythonWin-Werkzeugleiste auf die Schaltfläche Save klicken.
  18. Unter Ausführen und Debuggen von Python und Festlegen von Haltepunkten mit Python lernen Sie anhand des oben angegebenen Skripts mehr über die Arbeit mit Python.

    HinweisHinweis:

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

    HinweisHinweis:

    GetParameterAsText() wird verwendet, um Argumente zu empfangen. 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:
    arcpy.AddMessage(arcpy.GetMessages(2))
    print arcpy.GetMessages(2)

Verwandte Themen


7/10/2012