¿Usando MultiValue en los parámetros de la herramienta de script Python?

10

Mi script funciona bien con una sola clase de entidad seleccionada para clip_fc = arcpy.GetParameter(0).

Sin embargo, cuando configuro clip_fc en MultiValue en las propiedades del script y luego selecciono varias clases de entidad, aparece el error "Los parámetros no son válidos".

¿Alguien puede mostrarme dónde me estoy equivocando?

import arcpy
import os.path
from arcpy import env

arcpy.env.workspace = r"C:\GIS Home\project_1\clipshps\Combined_mf.gdb"
arcpy.env.overwriteOutput = True
clip_fc = arcpy.GetParameter(0)
clip_name = str(clip_fc)
output_dir = r"C:\GIS Home\project_1\clipshps\outputs_clip"

for fds in arcpy.ListDatasets():
    for fc in arcpy.ListFeatureClasses('','',fds):
        out = os.path.join(output_dir, fc + "_" + clip_name[40:] + "_clip.shp")
        arcpy.Clip_analysis(fc, clip_fc, out, "")
Mate
fuente
1
¿Podría poner el script con fc_list para ver cómo lo está usando?
om_henners
hola @om_henners Lo siento, he corregido mi pregunta, debería tener más sentido ahora.
Matt

Respuestas:

21

Necesita recorrer sus entradas. El multivalor está delimitado por punto y coma. Partir en eso y recorrerlos. (Agregue mensajes para mostrar cómo se presentan los fcs)

import arcpy

ins = arcpy.GetParameterAsText(0)
arcpy.AddMessage(ins)

for fc in ins.split(';'):
    arcpy.AddMessage(fc)
    arcpy.Clip_analysis(fc, clipfeats, out)

Aunque no estoy completamente seguro de tu flujo de trabajo. ¿Está pasando múltiples funciones para enganchar, pero también iterando a través de múltiples funciones en un GDB? Tendrá que tomar la lógica que coloqué arriba y averiguar qué combinación de entradas desea (1 o muchas FC dentro de un GDB + 1 o muchas entradas para su herramienta)

EDITAR ... Según su comentario, desea muchas clases de entidad recortadas por muchas clases de entidad. Pruebe esta combinación de código basada en la suya y la mía:

import arcpy, os

ins = arcpy.GetParameterAsText(0)
arcpy.AddMessage(ins)

arcpy.env.workspace = r"C:\GIS Home\project_1\clipshps\Combined_mf.gdb"
output_dir = r"C:\GIS Home\project_1\clipshps\outputs_clip"


for fds in arcpy.ListDatasets():

    # will loop for every featureclass
    for fc in arcpy.ListFeatureClasses('','',fds):            

        # will loop for each input fc from the tool
        for fc_clip in ins.split(';'):
            outName = os.path.join(output_dir, str(os.path.basename(fc)) + "_" + str(os.path.basename(fc_clip)))
            arcpy.Clip_analysis(fc, fc_clip, outName, "")
KHibma
fuente
2
Aquí hay un enlace a los archivos de ayuda de parámetros de la herramienta de script ESRI . También ofrecen un ejemplo de código.
Roy
Gracias @KHibma. Mirando tu respuesta, creo que voy por el camino equivocado. Tengo una geodatabase que contiene varias clases de entidad, y quiero recortar cada clase de entidad varias veces usando diferentes archivos de forma.
Matt
@KHibma intentó eso y obtuvo 'clip1 no existe o no es compatible'
Matt
Ummm, ¿funciona bien para mí? Lo único que puedo pensar es el directorio de salida. Es posible que deba agregar ".shp" al final de su nombre de usuario, ya que es una carpeta, no un gdb.
KHibma
7
for fc in arcpy.GetParameterAsText(0).split(";"):
    arcpy.AddMessage(fc)
arcpy.AddMessage("No more shapefiles")
Jason Scheirer
fuente