Exporter un modèle vers Python

L’exportation d’un modèle vers un script Python est un moyen pratique de se familiariser avec l’utilisation des outils et des environnements dans Python. Pour exporter un modèle vers Python, cliquez sur le bouton Export (Exporter) du ruban ModelBuilder, puis sélectionnez l’une des options suivantes :

  • Export To Python File (Exporter vers un fichier Python)
  • Send To Python Window (Envoyer dans la fenêtre Python)

Ces deux options génèrent le même code Python. Il est possible d’adapter le code et de l’utiliser comme un script Python autonome, ou de modifier le code pour en faire un outil de script.

Présentation de l’exportation d’un modèle vers Python

Lors de l’exportation d’un modèle vers un script Python, plusieurs aspects sont pris en compte pour adapter le modèle au code Python. Certains de ces aspects sont présentés ci-après.

Remplacer

Par défaut, un modèle exporté vers Python définit la propriété overwriteOutput sur False. Pour pouvoir remplacer un jeu de données quelconque, il convient de définir la propriété arcpy.env.overwriteOutput sur True.

Organisation du code

Avec le script exporté, un modèle est exporté sous la forme d’une fonction et les valeurs de paramètre sont transmises sous la forme d’arguments. Voici un exemple :

def Model(InputFC=r"C:\Data.gdb\inFC", Output="C:\Output.gdb\outFC", Extent="1186925.51155726 -2378062.72079588 1240005.19719053 -2315230.04252389", Name="Canada Goose"):

Si le modèle est composé de sous-modèles, leur contenu est exporté dans des sous-dossiers différents. Le fichier Python principal importe et appelle correctement le fichier Python de sous-modèles pendant l’exécution du code.

Extensions

La fonction CheckOutExtension est ajoutée pour les outils qui ont besoin d’extensions.

Couches et vues tabulaires

Si le modèle utilise des couches ou des vues tabulaires qui n’ont pas été créées dans le modèle, vous devez les créer dans le script à l’aide d’outils tels que l’outil Générer une couche d’entités et l’outil Générer une vue tabulaire.

Validation

Les éléments de données du modèle sont convertis en variables dans le script Python. Les noms de variable composés de caractères incompatibles, comme [({*^%$#@!&*,.";:/\, sont validés pour exclure les caractères incompatibles. Les valeurs de variable composées de caractères incompatibles restent inchangées. Évitez de nommer des éléments de données qui sont des mots-clés réservés dans Python (par exemple, class, global et return). Pour une liste complète des mots-clés réservés, utilisez la propriété keyword du module kwlist de Python.

  • Les noms de variable composés de caractères incompatibles, comme Input Features A_ [({*^%$#@!&*,.";:/\, sont validés sous la forme Input_Features_A_. Les valeurs de variable composées de caractères incompatibles restent inchangées, par exemple Input_Features_A_ = "A_ [({*^%$#@!&*,.\";:/\\". Évitez de nommer des éléments de données qui seront incompatibles dans Python (par exemple, class, global et return). Pour une liste complète des mots-clés réservés, utilisez la propriété keyword du module kwlist de Python.

Substitution de variables

  • La substitution de variables en ligne Type = '%Name%' dans un générateur d’expressions, pour des outils tels que l’outil Sélectionner une couche par attributs, est exportée sous la forme where_clause=f"Type = '{Name}'".
  • La substitution de variables en ligne pour un espace de travail %Output Workspace%\a ou %scratchGDB%\b est exportée sous la forme OutputFC = fr"{Output_Workspace}\a" et la forme OutputFC = fr"{arcpy.env.scratchGDB}\b".
  • La substitution de variables en ligne système, comme %n%, %i%, est transmise sous la forme d’une chaîne.

Types de données

  • Les valeurs des variables de modèle des types de données String (Chaîne), Long, Double et Boolean (Booléen) sont mappées sur les types de données Python. Toutes les autres valeurs de type de données sont mappées sous forme de chaînes dans Python.
  • Les valeurs des paramètres de la table de valeurs sont mappées sous forme de liste. Voici un exemple :
    arcpy.Statistics_analysis(in_table=a, out_table=b, statistics_fields=[["Type", "COUNT"], ["Year", "COUNT"]], case_field=["Type"])
  • Les paramètres d’appariement de champ, tels que le paramètre Field Map (Appariement de champ) de l’outil Ajouter, sont convertis en chaîne délimitée par des points-virgules, comme suit :
    field_mapping="Type \"Type\" true true false 20 Text 0 0,First,#,InputFC,Type,0,20;Year \"Year\" true true false 2 Short 0 0,First,#,InputFC,Year,-1,-1)

Environnements

Seuls les paramètres d’environnement modifiés à partir de la valeur par défaut sont exportés vers Python pour l’application, le modèle et l’outil. Le script exporté définit les environnements en utilisant la classe EnvManager dans un bloc with. Les valeurs de paramètres d’environnement sont temporaires et définies uniquement pour la durée du bloc with.

import arcpy
def GnatcatcherHabitat():  # Gnatcatcher Habitat
    # Model Environment settings    with arcpy.EnvManager(extent="3434731.64703611 -1534445.99025604 3485825.15860115 -1466080.56806995")
        # Process: Buffer (Buffer)         with arcpy.EnvManager(extent="1187538.76766617 -2377527.90888239 1230418.76331601 -2319961.0344503")
            arcpy.Buffer_analysis(in_features=r"C:\Data.gdb\A", out_feature_class=r"C:\Output.gdb\B", buffer_distance_or_field="500 Meters", line_side="FULL", line_end_type="ROUND", dissolve_option="NONE",dissolve_field=[], method="PLANAR")
if __name__ == '__main__':
    # Global Environment settings    with arcpy.EnvManager(scratchWorkspace=r"C:\Output.gdb\", workspace=r"C:\Data.gdb\"):
        GnatcatcherHabitat()

Flux de modèle

  • Les conditions préalables (préconditions) des modèles sont converties en un bloc « if » :
    if a and b:
        arcpy.Buffer_analysis(in_features=inFC, out_feature_class=outFC, buffer_distance_or_field="10 Meters", line_side="FULL", line_end_type="ROUND", dissolve_option="NONE", dissolve_field=[], method="PLANAR")
  • Les boucles de rétroaction des modèles sont transposées dans le flux du script.

Outils de modèles

Les outils de modèles Itérateurs, Utilitaires ou Logique ne sont pas exportés vers Python. Il vous faut ajouter les fonctions Python équivalentes proposées par ces outils. Par exemple, vous devez utiliser la logique « if/else » pour exécuter un branchement conditionnel dans votre script.

Sorties dérivées

Les valeurs de sortie dérivée sont attribuées aux variables par l’indexation de l’objet Result d’un outil de géotraitement, comme suit :

output = arcpy.JoinField_management(in_data=infc, in_field="Type", join_table=joinTable, join_field="Type", fields=["Year"])[0]