在Python脚本工具参数中使用MultiValue?


10

我的脚本与一起选择的单个要素类可以正常工作clip_fc = arcpy.GetParameter(0)

但是,当我在脚本属性中将clip_fc设置为MultiValue,然后选择多个要素类时,出现错误“参数无效”。

谁能告诉我我要去哪里错了?

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

1
您能否在其中添加带有fc_list的脚本以查看其使用方式?
om_henners 2012年

您好@om_henners抱歉,我更正了我的问题,现在应该更有意义了。
马特

Answers:


21

您需要遍历输入。多值以分号分隔。拆分并循环遍历它们。(AddMessages显示如何显示FCS)

import arcpy

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

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

尽管我不确定您的工作流程。您要传递多个功能以进行剪辑,还需要遍历GDB中的多个功能?您必须采用我上面提到的逻辑,并弄清楚您想要什么输入组合(GDB中有1个或多个FC + 1个或您工具的许多输入)

编辑...根据您的评论,您希望许多要素类被许多要素类剪裁。尝试根据您和我的代码进行以下混搭:

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

2
这是指向ESRI 脚本工具参数帮助文件的链接。他们也提供了代码示例。
罗伊2012年

谢谢@KHibma看着你的回答,我想我会以错误的方式来做。我有一个包含许多要素类的地理数据库,并且我想使用不同的shapefile多次裁剪每个要素类。
马特

@KHibma尝试了这一操作,并得到'clip1不存在或不受支持'
Matt

嗯,对我来说很好吗?我唯一能想到的就是输出目录。您可能需要在名称末尾添加“ .shp”作为文件夹,而不是gdb。
KHibma

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.