Verwenden von MultiValue in Python-Skript-Tool-Parametern?

10

Mein Skript funktioniert gut mit einer einzelnen Feature-Class, für die ausgewählt wurde clip_fc = arcpy.GetParameter(0).

Wenn ich jedoch clip_fc in den Skripteigenschaften auf MultiValue setze und dann mehrere Feature-Classes auswähle, wird die Fehlermeldung "Parameter sind ungültig" angezeigt.

Kann mir jemand zeigen, wo ich falsch liege?

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
quelle
1
Könnten Sie das Skript mit fc_list erstellen, um zu sehen, wie Sie es verwenden?
om_henners
hi @om_henners Sorry, ich habe meine Frage korrigiert, sollte jetzt mehr Sinn machen.
Matt

Antworten:

21

Sie müssen Ihre Eingaben durchlaufen. Multivalue ist durch Semikolons getrennt. Teilen Sie das auf und durchlaufen Sie sie. (AddMessages, um zu zeigen, wie die fcs dargestellt werden)

import arcpy

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

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

Obwohl ich mir Ihres Workflows nicht ganz sicher bin. Sie übergeben mehrere Funktionen zum Anstecken, durchlaufen aber auch mehrere Funktionen in einer GDB? Sie müssen die oben platzierte Logik verwenden und herausfinden, welche Kombination von Eingaben Sie möchten (1 oder viele FCs in einem GDB + 1 oder viele Eingaben in Ihr Werkzeug).

BEARBEITEN ... Basierend auf Ihrem Kommentar möchten Sie, dass viele Feature-Classes von vielen Feature-Classes abgeschnitten werden. Probieren Sie dieses Code-Mashup aus, das auf Ihrem und meinem basiert:

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
quelle
2
Hier ist ein Link zu den Parameter-Hilfedateien des ESRI Script Tool . Sie bieten auch ein Codebeispiel.
Roy
Danke @KHibma Wenn ich mir deine Antwort ansehe, denke ich, dass ich das falsch mache. Ich habe eine Geodatabase mit mehreren Feature-Classes und möchte jede Feature-Class mehrmals mit unterschiedlichen Shapefiles ausschneiden.
Matt
@KHibma hat das versucht und bekam 'clip1 existiert nicht oder wird nicht unterstützt'
Matt
Ähm, funktioniert es gut für mich? Ich kann mir nur das Ausgabeverzeichnis vorstellen. Möglicherweise müssen Sie am Ende Ihres Outnamens ".shp" als Ordner und nicht als GDB hinzufügen.
KHibma
7
for fc in arcpy.GetParameterAsText(0).split(";"):
    arcpy.AddMessage(fc)
arcpy.AddMessage("No more shapefiles")
Jason Scheirer
quelle