Création d'un nouveau script Python

Pour conserver le code Python, créez des fichiers Python (.py). Ces fichiers sont des fichiers ASCII qui contiennent des instructions Python.

Etapes :
  1. Dans l'environnement de développement intégré (IDE) Python de votre choix, créez un script et ajoutez les lignes suivantes en haut du script :
  2. # Import ArcPy site-package and os modules
    import arcpy 
    import os
    

    Ce code importe le site-package ArcPy et le module système d'exploitation os dans le script. Le module os offre un accès rapide aux outils fondamentaux du système d'exploitation. Certaines méthodes de gestion des noms de fichiers du module os sont utilisées dans ce script.

    Ce script contient les quatre arguments suivants pour pouvoir être utilisé d'une façon générique :

    • Un espace de travail en entrée définissant l'ensemble de classes d'entités à traiter
    • Une classe d'entité utilisée par l'outil Découper comme zone à découper à partir de la classe d'entités en entrée
    • Un espace de travail en sortie où s'affichent les résultats de l'outil Découper
    • Une tolérance XY utilisée par l'outil Découper
  3. Ajoutez le code suivant à votre script pour définir des variables basées sur des valeurs spécifiées par l'utilisateur transmises au script lors de l'exécution :
  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. Ajoutez dans la fenêtre de script l'instruction de gestion des erreurs et la fonction ListFeatureClasses() :
  6. try:
        # Get a list of the featureclasses in the input folder
        fcs = arcpy.ListFeatureClasses()
    

    Python applique une indentation du code après certaines instructions sous forme d'une construction de langage. L'instruction try définit le début d'un bloc de code géré par son gestionnaire d'exceptions associé ou l'instruction except. La totalité du code de ce bloc doit être indentée. Python utilise les blocs try/except pour gérer les erreurs inattendues survenues lors de l'exécution. Les gestionnaires d'exceptions définissent l'action du programme lorsqu'une exception est signalée par le système ou le script. La gestion des exceptions permet de fermer correctement le script et de renvoyer des messages d'information au lieu de provoquer une erreur système.

    La fonction ListFeatureClasses() renvoie une liste des noms de classes d'entités de l'espace de travail en cours. L'espace de travail définit l'emplacement de vos données et l'emplacement où toutes les nouvelles données sont créées, sauf si un chemin complet est spécifié. L'espace de travail a déjà été défini selon la valeur du premier argument. Une boucle for permet de parcourir chaque classe d'entités contenue dans la liste.

  7. Ajoutez le code suivant :
  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)
    

    Lorsqu'il n'y a plus de noms dans la liste, la boucle for se termine. La fonction ValidateTableName() permet de s'assurer que le nom en sortie est correct pour l'espace de travail en sortie. Certains caractères, tels que les points ou les tirets, ne sont pas autorisés dans les géodatabases. Cette méthode renvoie donc un nom contenant des caractères valides à la place de ceux qui ne le sont pas. Elle renvoie également un nom unique afin qu'aucune donnée existante ne soit remplacée.

    La méthode os.path.basename sert à gérer le chemin des classes d'entités de découpage. Ainsi, seul le nom de la classe d'entités est évalué dans une expression et non pas le chemin complet. L'outil Découper est exécuté comme une fonction ArcPy, en utilisant différentes variables de chaîne comme valeurs de paramètres.

  9. Ajoutez les lignes suivantes pour terminer le script :
  10. except Exception as err:
        arcpy.AddError(err)
        print err
    

    L'instruction except est requise par l'instruction try précédente pour éviter qu'une erreur de syntaxe se produise. Si une erreur survient lors de l'exécution, le code du bloc except est exécuté. Tout message d'erreur est ajouté avec la fonction AddError() au cas où le script est exécuté à partir d'un outil de script. Tous les messages d'erreur s'affichent également dans la sortie standard si le script est exécuté à l'extérieur d'un outil.

  11. Ajoutez l'en-tête suivant au début de votre script :
  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. Enregistrez le script.
  14. RemarqueRemarque :

    Lorsque vous nommez des variables, n'oubliez pas que Python respecte la casse. Ainsi, clipFeatures n'est pas équivalent à ClipFeatures.

    RemarqueRemarque :

    GetParameterAsText() permet de recevoir des arguments. Si un script utilise des noms de jeux de données définis et des valeurs de paramètres, il ne peut pas utiliser la fonction GetParameterAsText().

    RemarqueRemarque :

    Les instructions qui se terminent par un point indiquent le début du code indenté. Python n'utilise aucune accolade, guillemet ou point-virgule pour indiquer le début ou la fin d'un bloc de code. Au lieu de cela, Python utilise l'indentation du bloc pour définir ses limites. Le code ainsi obtenu s'avère plus facile à lire et à écrire.

Script terminé :

"""-----------------------------------------------------------------------------
  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

Thèmes connexes

5/10/2014