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. Para seguir los siguientes pasos, se considera que va a usar la aplicación PythonWin, según se describe en Writing_Python_scripts.
- En PythonWin, haga clic en el menú Archivo y haga clic en Nuevo. Acepte la opción preconfigurada de Python Script y haga clic en OK.
- Haga clic en el botón Maximizar de la ventana Script1.
- Haga clic en el menú Archivo y, a continuación, haga clic en Guardar como. Nombre la secuencia de comandos multi_clip.py y guárdela en una carpeta de su elección.
- Agregue las líneas siguientes en la parte superior de su secuencia de comandos:
- 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
Consultar la herramienta Recortar de la caja de herramientas Análisis para obtener más información sobre el funcionamiento de 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 los comentarios siguientes a la parte superior de su secuencia de comandos:
- Guarde la secuencia de comandos haciendo clic en el botón Guardar en la barra de herramientas de PythonWin.
Se abre la ventana Script1. Script1 es el nombre preconfigurado de su 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 prueba define el comienzo de un bloque de código que se controla mediante su controlador de excepción asociado, o declaración de excepción. Toda la codificación contenida en este bloque debe quedar indentada. Python usa bloques de prueba/excepción 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. Es una buena práctica usar controladores de excepción en cualquier secuencia de comandos de manera que sus mensajes de error puedan propagarse hasta el usuario. Esto también permite que la secuencia de comandos salga correctamente y devuelva mensajes informativos en lugar de causar simplemente un error del sistema.
La función ListFeatureClasses() devuelve un lista de Python 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. Un listado Python es un objeto versátil. 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 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 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: arcpy.AddMessage(arcpy.GetMessages(2)) print arcpy.GetMessages(2)
La declaración de excepción 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 de excepción. Cualquier mensaje con un valor de gravedad de 2, indicador de un error, se agrega 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 completada anterior se usa para aprender más acerca del uso de Python con Ejecutar y depurar Python y Configurar puntos de corte mediante Python.
Respecto a nombrar variables, recordar que Python distingue entre mayúsculas y minúsculas, de manera que clipFeatures no es lo mismo que ClipFeatures.
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().
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: arcpy.AddMessage(arcpy.GetMessages(2)) print arcpy.GetMessages(2)