Exportar un modelo a Python

Exportar un modelo a un script de Python puede ayudarlo a aprender cómo se usan las herramientas y los entornos en Python. Para exportar un modelo a Python, haga clic en el botón Exportar en la cinta de ModelBuilder y elija una de las siguientes opciones:

  • Exportar a archivo de Python
  • Enviar a ventana de Python

Ambas opciones generan el mismo código de Python. El código se puede editar más y utilizar como script de Python independiente, o bien modificar para que funcione como herramienta de script.

Consideraciones para la exportación de los modelos mediante Python

Al exportar un modelo a un script de Python, se tienen en cuenta algunas consideraciones para adaptar el modelo al código de Python. A continuación, se describen algunas de estas consideraciones.

Sobrescribir

De forma predeterminada, un modelo exportado a Python cambia la propiedad overwriteOutput a False. Para admitir la sobrescritura de cualquier dataset de salida, cambie la propiedad arcpy.env.overwriteOutput a True.

Organización de código

Con el script exportado, se exporta un modelo como una función y los valores del parámetro se trasmiten como argumentos, como:

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 el modelo incluye submodelos, el contenido de esos submodelos se exporta a subcarpetas independientes. El archivo de Python principal se importará correctamente y llamará al archivo de Python del submodelo durante la ejecución del código.

Extensiones

Se agrega la función CheckOutExtension para herramientas con requisitos de extensión.

Vistas de capas y tabla

Si el modelo utiliza capas o vistas de tabla que no se crearon en el modelo, deberá crear esas capas o vistas de tabla en el script mediante herramientas como Crear capa de entidades y Crear vista de tabla.

Validación

Los elementos de datos del modelo se convierten a variables en el script de Python. Los nombres de variables con caracteres incompatibles, como [({*^%$#@!&*,.";:/\, se validarán para excluir los caracteres incompatibles. Los valores de variables con caracteres incompatibles se mantendrán tal cual. Evite los nombres de elementos de datos que sean palabras clave reservadas en Python, como class, global y return. Para obtener una lista completa de las palabras clave reservadas, utilice la propiedad keyword del módulo kwlist de Python.

  • Los nombres de variables con caracteres incompatibles, como Input Features A_ [({*^%$#@!&*,.";:/\ se validarán como Input_Features_A_. Los valores de variables con caracteres incompatibles se mantendrán tal cual, por ejemplo, Input_Features_A_ = "A_ [({*^%$#@!&*,.\";:/\\". Evite los nombres de elementos de datos que serán incompatibles en Python (por ejemplo, class, global y return). Para obtener una lista completa de las palabras clave reservadas, utilice la propiedad keyword del módulo kwlist de Python.

Sustitución de variables

Los modelos que contienen sustitución de variables en línea se exportarán a Python tal y como se indica a continuación:

  • La sustitución de variables en línea Type = '%Name%' en un builder de expresiones de herramientas, como Seleccionar capa por atributo, se exportará como where_clause=f"Type = '{Name}'".
  • La sustitución de variables en línea para un espacio de trabajo %Output Workspace%\a o %scratchGDB%\b se exportará como OutputFC = fr"{Output_Workspace}\a" y OutputFC = fr"{arcpy.env.scratchGDB}\b".
  • La sustitución de variables en línea del sistema, como %n% y %i%, se transmitirá como una cadena de caracteres.
  • Una variable con sustitución de variables en línea y establecida como parámetro de modelo se evaluará mediante las funciones integradas en Python locals(), globals() y isinstance() al exportarse a Python, por ejemplo:
    arcpy.analysis.Buffer(in_features=_Name_.__str__().format(**locals(),**globals())if isinstance(_Name_, str) else _Name_, out_feature_class=Name_Buffer, buffer_distance_or_field="10 Meters")

Tipos de datos

Los tipos de datos del modelo cuando se exportaron a Python se asignaron de la siguiente forma:

  • Los valores de las variables de modelo de tipo de datos Cadena de caracteres, Largo, Doble y Booleano se asignan a tipos de datos de Python. El resto de valores de tipo de datos se asignan como cadenas de caracteres en Python.
  • Los valores del parámetro de la tabla de valores se asignarán como listas, por ejemplo:
    arcpy.Statistics_analysis(in_table=a, out_table=b, statistics_fields=[["Type", "COUNT"], ["Year", "COUNT"]], case_field=["Type"])
  • Los parámetros de asignación de campos, como el parámetro Mapa de campo de la herramienta Incorporar, se convertirán en una cadena de caracteres delimitada por punto y coma, de esta manera:
    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)

Entornos

Solo la configuración del entorno que se haya cambiado desde el valor predeterminado se exportará a Python para la aplicación, el modelo y la herramienta. El script exportado configura entornos con la clase EnvManager dentro de un bloque with; los valores de la configuración del entorno son temporales y solo se establecen durante la vigencia del bloque 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()

Flujo de modelos

  • Las condiciones previas del modelo se convierten en un bloque 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")
  • Los bucles de retroalimentación del modelo se traducen en el flujo de script.

Herramientas de modelo

Las herramientas del modelo Iteradores, Utilidades o Lógica no se exportarán a Python. Deberá agregar la funcionalidad de Python equivalente que proporcionan estas herramientas. Por ejemplo, tendrá que utilizar la lógica if/else para llevar a cabo la ramificación condicional en su script.

Salidas derivadas

Los valores de salidas derivadas se asignan a variables indexando el objeto Result de una herramienta de geoprocesamiento de esta manera:

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