Python komut dosyası aracı parametrelerinde MultiValue mu kullanıyorsunuz?


10

Betiğim için seçilen tek bir özellik sınıfı ile iyi çalışıyor clip_fc = arcpy.GetParameter(0).

Ancak, clip_fc komut dosyası özelliklerinde MultiValue olarak ayarlayıp birkaç özellik sınıfı seçtiğimde, "Parametreler geçerli değil" hatası alıyorum.

Biri bana nerede yanlış yaptığımı gösterebilir mi?

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
Nasıl kullandığınızı görmek için betiği fc_list ile koyabilir misiniz?
om_henners

hi @om_henners Üzgünüm sorumu düzelttim, şimdi daha anlamlı olmalı.
Matt

Yanıtlar:


21

Girdileriniz arasında dolaşmanız gerekir. Çoklu değer noktalı virgülle sınırlandırılmıştır. Bunun üzerine bölün ve onların arasında dolaşın. (Fcs'in nasıl sunulduğunu göstermek için AddMessages)

import arcpy

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

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

Yine de iş akışınızdan tam olarak emin değilim. Üzerinde klip çekmek için birden fazla özellik mi geçiyorsunuz? Yukarıda yerleştirdiğim mantığı almanız ve hangi giriş kombinasyonunu istediğinizi bulmanız gerekir (bir GDB + 1 içindeki 1 veya daha fazla FC veya aracınıza birçok giriş)

DÜZENLE ... Yorumunuza dayanarak, birçok özellik sınıfı tarafından kırpılan birçok özellik sınıfı istersiniz. Sizinkine ve benimkine dayanarak bu kod karışımını deneyin:

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
İşte ESRI Komut Dosyası Aracı Parametresi Yardım Dosyalarına bir bağlantı . Onlar da bir kod örneği sunuyoruz.
Roy

Teşekkürler @KHibma Cevabınıza baktığımda bunun yanlış yoldan gittiğimi düşünüyorum. Birkaç özellik sınıfı içeren bir coğrafi veritabanı var ve her şekil sınıfını farklı şekil dosyaları kullanarak birkaç kez kırpmak istiyorum.
Matt

@KHibma bunu denedi ve 'clip1 mevcut değil veya desteklenmiyor' var
Matt

Ummm benim için iyi çalışıyor mu? aklıma gelen tek şey çıktı dir. ".Shp" yi, adınızın sonuna bir klasör olarak değil, bir gdb olarak eklemeniz gerekebilir.
KHibma

7
for fc in arcpy.GetParameterAsText(0).split(";"):
    arcpy.AddMessage(fc)
arcpy.AddMessage("No more shapefiles")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.