Création d'un nouveau script Python

Pour conserver le code Python, vous créez des fichiers Python (.py). Ces fichiers sont des fichiers ASCII qui contiennent des instructions Python. Les étapes suivantes supposent que vous utilisez l'application PythonWin, comme le décrit la rubrique Ecriture de scripts Python.

Etapes :
  1. Dans PythonWin, cliquez sur le menu Fichier et sélectionnez Nouveau. Acceptez l'option par défaut du script Python, puis cliquez sur OK.
  2. La fenêtre Script1 s'ouvre. Script1 représente le nom par défaut de votre script.

  3. Cliquez sur le bouton Agrandir de la fenêtre Script1.
  4. Cliquez sur le menu Fichier, puis sur Enregistrer sous. Nommez le script multi_clip.py et enregistrez-le dans le dossier de votre choix.
  5. Ajoutez les lignes suivantes en haut du script :
  6. # 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

      Reportez-vous à l'outil Découper de la boîte à outils Analyse pour obtenir des informations détaillées sur le fonctionnement de cet outil.

  7. 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 :
  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. Ajoutez dans la fenêtre de script l'instruction de gestion des erreurs et la fonction ArcPy ListFeatureClasses() :
  10. 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. Il est conseillé d'utiliser la gestion des exceptions dans un script à l'aide du géoprocesseur afin que ses messages d'erreur puissent être renvoyés à l'utilisateur. Cette opération 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 Python 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 liste Python est un objet polyvalent. Une boucle for permet de parcourir chaque classe d'entités contenue dans la liste.

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

    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 basename de os.path 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.

  13. Ajoutez les lignes suivantes pour terminer le script :
  14. except:
        arcpy.AddMessage(arcpy.GetMessages(2))
        print arcpy.GetMessages(2)
    

    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 dont la valeur de gravité est 2 (signalant une erreur) est ajouté 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.

  15. Ajoutez les commentaires suivants au début de votre script :
  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. Enregistrez le script en cliquant sur le bouton Enregistrer de la barre d'outils PythonWin.
  18. Le script utilisé ci-dessus permet d'en savoir plus sur l'utilisation de Python avec les fonctions Exécution et débogage de Python et Spécification de seuils à l'aide de Python.

    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:
    arcpy.AddMessage(arcpy.GetMessages(2))
    print arcpy.GetMessages(2)

Rubriques connexes


7/10/2012