Usando o MultiValue nos parâmetros da ferramenta de script Python?

10

Meu script funciona bem com uma única classe de recurso selecionada para clip_fc = arcpy.GetParameter(0).

No entanto, quando defino clip_fc como MultiValue nas propriedades do script e, em seguida, seleciono várias classes de recursos, recebo o erro "Os parâmetros não são válidos".

Alguém pode me mostrar onde estou errado?

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, "")
Matt
fonte
11
Você poderia colocar o script com fc_list para ver como o está usando?
Om_henners #
oi @om_henners Desculpe por ter corrigido minha pergunta, agora deveria fazer mais sentido.
Matt

Respostas:

21

Você precisa percorrer suas entradas. O valor múltiplo é delimitado por ponto e vírgula. Divida isso e passe por eles. (AddMessages para mostrar como os fcs são apresentados)

import arcpy

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

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

Embora eu não tenha muita certeza do seu fluxo de trabalho. Você está passando vários recursos para gravar, mas também iterando através de vários recursos em um GDB? Você terá que seguir a lógica que eu coloquei acima e descobrir qual combinação de entradas você deseja (1 ou muitos FCs dentro de um GDB + 1 ou muitas entradas para sua ferramenta)

EDITAR ... Com base no seu comentário, você deseja muitas classes de recursos cortadas por muitas classes de recursos. Experimente este mash up de código com base no seu e no meu:

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
fonte
2
Aqui está um link para os arquivos de ajuda dos parâmetros da ferramenta de script ESRI . Eles também oferecem um exemplo de código.
Roy
Obrigado @KHibma Olhando para a sua resposta, acho que estou fazendo isso da maneira errada. Eu tenho um geodatabase que contém várias classes de recursos e quero recortar cada classe de recurso várias vezes usando diferentes shapefiles.
Matt
@KHibma tentou isso e tem 'clip1 não existe ou não é suportado'
Matt
Ummm, funciona bem para mim? única coisa que posso pensar é o diretório de saída. Pode ser necessário adicionar ".shp" ao final do seu nome de saída, pois é uma pasta, não um gdb.
KHibma
7
for fc in arcpy.GetParameterAsText(0).split(";"):
    arcpy.AddMessage(fc)
arcpy.AddMessage("No more shapefiles")
Jason Scheirer
fonte