Arcpy.ListFeatureClasses ile birden fazla joker karakter parametresi kullanma


12

Bunu yapmanın bir yolu olması gerektiğini biliyorum ama bunu nasıl yapacağımı anlamakta zorlanıyorum. İşlemleri gerçekleştirmek için özellik sınıflarının bir listesini oluşturmak istiyorum, ancak liste 2 ayrı ve farklı dosya adı tanımlayıcıları olan özellik sınıfları içeren istiyorum. Kod şöyle görünecektir:

FCS = arcpy.ListFeatureClasses("X_*" OR "*_Y")

Ancak OR yanlış olduğunu biliyorum, ikinci joker ile çalışmak için kod yeniden yazmak zorunda kalmadan bunu yapmak için bir yolu var. Gut'a yardım ettiğiniz için teşekkür ederim, OR deyimini kullanarak birden çok joker karakter kullanımına izin veren Niteliklere Göre Seçim'de bir seçim yöntemi olduğunu biliyorum.


Joker parametre yalnızca bir dizeyi giriş olarak alır, bu nedenle ListFeatureClasses()iki kez çalışmaz (bu, büyük dizinler için çok yavaş olabilir), joker karakter iletmemek ve daha sonra sadece sonucu filtrelemek en iyisidir
Paul

Paul, tam olarak aşağıdaki liste anlama cevabının yaptığı şeydir - listeden geçer ve if ifadesine göre filtreler.
dklassen

@dklassen, OP "_Y" ile biten FC'yi arıyor, başlamıyor. Bir GDB'ye karşı joker karakter uygulayabilirsiniz, ancak kodunuzla şekil dosyaları kullanamazsınız.
Paul

Yanıtlar:


16

İkisini birlikte ekleyin, bunlar sadece listelerdir.

FCS = arcpy.ListFeatureClasses("X_*") + arcpy.ListFeatureClasses("*_Y")

Kopyaları ortadan kaldırmak için:

FCS = set(arcpy.ListFeatureClasses("X_*") + arcpy.ListFeatureClasses("*_Y"))

Bu da işe yarıyor, @Jason Sheirer, startswith ve endiswith kullanarak benim için bir GDB dosyasında çalışıyor. Bir SDE ile çalışmak için kullandığım senaryoyu değiştirdiğimde, herhangi bir nedenle işe yaramadı. Bahsettiğiniz yöntem SDE'de çalışır.
standart

6

Buna biraz farklı yaklaşabilirsiniz:

import arcpy
import os

arcpy.env.workspace = 'c:\temp'
fcs = [fc for fc in arcpy.ListFeatureClasses() if fc.startswith('X_') or os.path.splitext(fc)[0].endswith('_Y')]

Bir GDB'de değilseniz bu gerçekten işe yaramaz. Uzantı, şekil dosyaları için döndürülür.
Paul

Bu, ayarlanmış çalışma alanınızdaki herhangi bir özellik sınıfı için çalışmalıdır. Shapefiles dahil - neden bir uzantının döndürülmesini istemiyoruz?
dklassen

Çünkü biten karakterlere karşı joker karakter kullanamazsınız - OP'nin yaptığı şey budur.
Paul

@ Paul Değiştirildi - düzeltme için teşekkürler. "_Y" bölümünü görmedim.
dklassen

2
Biraz nitpicky, ama kullanmalısın os.path.splitext(). Şekil dosyasının adında bir nokta olabilir. +1
Paul

1

Bu komut dosyaları bir listede birden fazla joker karakter belirtir cases[]. Daha sonra benzersiz durumlar üzerinde dolaşarak istenen özellik sınıflarını 'arcpy.ListFeatureClasses ()' listeler. Seçilen her özellik sınıfı, '.extend' kullanarak yeni özellik sınıfları listesine eklenir

# Create a list of the wildcards 
cases = ["X_*", ""*_Y""]

# Create empty list to store all selected files
fcs= []

# Loop through files to select files following multiple wildcards
for case in cases:
    fc = arcpy.ListFeatureClasses(case)
    # Insert the fc to the list
    fcs.extend(fc)
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.