Para conservar un código Python, debe crear archivos Python (.py). Estos archivos son archivos ASCII que contienen declaraciones Python.
- 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:
- 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
- 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:
- Agregue la siguiente declaración para manejo de errores y función ListFeatureClasses() de ArcPy a la ventana de secuencia de comandos:
- Agregue el siguiente código:
- Agregue las líneas siguientes para completar la secuencia de comandos:
- Agregue el encabezado siguiente a la parte superior de su secuencia de comandos:
- Guarde la secuencia de comandos.
# 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:
# 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()
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.
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.
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.
"""-----------------------------------------------------------------------------
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.
-----------------------------------------------------------------------------"""
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