Crear una secuencia de comandos Python nueva

Para conservar un código Python, debe crear archivos Python (.py). Estos archivos son archivos ASCII que contienen declaraciones Python.

Pasos:
  1. En el entorno de desarrollo integrado (IDE) de Python de su elección, cree una nueva secuencia de comandos y añada las líneas siguientes en la parte superior de la misma:
  2. # Import ArcPy site-package and os modules
    import arcpy 
    import os
    

    Así se importan el paquete de sitio ArcPy y el módulo del sistema operativo os a la secuencia de comandos. El módulo os proporciona un acceso sencillo a las herramientas más básicas del sistema operativo. Algunos de los métodos de manipulación del nombre de archivo del módulo os se utilizan en esta secuencia de comandos.

    Esta secuencia de comandos va a tener los cuatro siguientes argumentos, de forma que se pueden usar genéricamente:

    • Un espacio de trabajo de entrada que define las clases de entidad a procesar
    • Una clase de entidad a usar mediante la herramienta Recortar como el área a recortar desde una clase de entidad de entrada
    • Un espacio de trabajo de salida en el que se van a escribir los resultados de la herramienta Recortar
    • Una tolerancia XY que utilizará la herramienta Recortar
  3. Agregue el siguiente código a su secuencia de comandos para definir y configurar las variables basadas en valores definidos por el usuario pasadas a la secuencia de comandos durante la ejecución:
  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. Agregue la siguiente declaración para manejo de errores y función ListFeatureClasses() de ArcPy a la ventana de secuencia de comandos:
  6. try:
        # Get a list of the featureclasses in the input folder
        fcs = arcpy.ListFeatureClasses()
    

    Python refuerza la indentación del código tras determinadas declaraciones como una construcción del lenguaje. La declaración try define el comienzo de un bloque de código que se controla mediante su controlador de excepción asociado, o declaración except. Toda la codificación contenida en este bloque debe quedar indentada. Python usa bloques try/except para controlar errores inesperados durante la ejecución. Los controladores de excepción definen qué debe hacer un programa cuando se produce una excepción del sistema o de la propia secuencia de comandos. El manejo de excepciones también permite que la secuencia de comandos salga correctamente y devuelva mensajes informativos en lugar de causar un error del sistema.

    La función ListFeatureClasses() devuelve un listado de nombres de clases de entidad en el espacio de trabajo actual. El espacio de trabajo define la ubicación de los datos y dónde se van a crear los datos nuevos, salvo que se especifique una ruta completa. El espacio de trabajo ya ha sido establecido al primer valor del argumento. Se usar un bucle for para examinar cada clase de entidad contenida en el listado.

  7. Agregue el siguiente código:
  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)
    

    Cuando no hay más nombres en la lista, el bucle for finaliza. La función ValidateTableName() se usa para asegurar que el nombre de salida es válido para el espacio de trabajo de salida. Algunos caracteres, como puntos o guiones, no se permiten en las geodatabases, por lo que este procedimiento devuelve un nombre con caracteres válidos en lugar de los no válidos. También devuelve un nombre único de forma que se sobrescriben los datos no existentes.

    El nombre base del método os.path.basename se utiliza para manipular la ruta de la clase de entidad de recorte, de manera que sólo se evalúa el nombre de la clase de entidad, y no la ruta completa. La herramienta Recortar es accesible como función ArcPy, al utilizar las diferentes variables de cadena de caracteres como valores de parámetro.

  9. Agregue las líneas siguientes para completar la secuencia de comandos:
  10. except Exception as err:
        arcpy.AddError(err)
        print err
    

    La declaración de except se necesita en la declaración de prueba anterior; de lo contrario, se produce un error de sintaxis. Si se produce un error durante la ejecución, se ejecuta el código contenido en el bloque except. Cualquier mensaje de error se agrega mediante la función AddError() en caso de que una secuencia de comandos se ejecute desde una herramienta de secuencia de comandos. Todos los mensajes de error se imprimen también en la salida estándar en caso de que una secuencia de comandos se ejecute fuera de una herramienta.

  11. Agregue el encabezado siguiente a la parte superior de su secuencia de comandos:
  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. Guarde la secuencia de comandos.
  14. NotaNota:

    Cuando nombre variables, recuerde que Python distingue entre mayúsculas y minúsculas, de manera que clipFeatures no es lo mismo que ClipFeatures.

    NotaNota:

    GetParameterAsText() se usa para recibir argumentos. Si una secuencia de comandos utiliza nombres de dataset y valores de parámetro definidos, puede que no necesite utilizar la función GetParameterAsText().

    NotaNota:

    Las declaraciones que terminan con punto y coma indican el inicio de código indentado. Python no usa llaves, paréntesis o punto y coma para indicar el inicio o final de un bloque de código. En su lugar, Python utiliza la indentación del bloque para definir sus límites. Esto da como resultado un código sencillo de leer y escribir.

La secuencia de comandos completa:

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

Temas relacionados

5/9/2014