Menggunakan beberapa parameter wildcard dengan arcpy.ListFeatureClasses

12

Saya tahu harus ada cara untuk melakukan ini, tetapi saya mengalami kesulitan mencari tahu bagaimana melakukannya. Saya ingin membuat daftar kelas fitur untuk melakukan operasi pada Namun, saya ingin daftar berisi kelas fitur yang memiliki 2 pengidentifikasi nama file yang berbeda dan berbeda. Kode akan terlihat seperti:

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

Saya tahu ATAU salah, apakah ada cara untuk melakukan ini tanpa harus menulis ulang kode untuk bekerja dengan wildcard kedua. Terima kasih telah membantu gout, saya tahu ada metode pemilihan dalam Select By Attributes yang memungkinkan untuk menggunakan beberapa wildcard menggunakan pernyataan ATAU.

standar
sumber
Parameter wildcard hanya mengambil string sebagai input, sehingga pendek berjalan ListFeatureClasses()dua kali (yang berpotensi menjadi terlalu lambat untuk direktori besar, yang terbaik adalah tidak melewatkan wildcard dan kemudian hanya menyaring hasil setelahnya.
Paul
Paul, itulah yang dilakukan jawaban pemahaman daftar di bawah ini - ia menelusuri daftar dan memfilternya berdasarkan pernyataan if.
dklassen
@ Gelas, OP mencari FC yang diakhiri dengan "_Y", bukan memulai. Anda bisa wildcard itu terhadap GDB, tetapi tidak membentuk dengan kode Anda.
Paul

Jawaban:

16

Tambahkan keduanya bersamaan, mereka hanya daftar.

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

Untuk menghilangkan duplikat:

FCS = set(arcpy.ListFeatureClasses("X_*") + arcpy.ListFeatureClasses("*_Y"))
Jason Scheirer
sumber
Ini juga berfungsi, terima kasih @Jason Sheirer, menggunakan startswith dan endswith bekerja untuk saya dalam file GDB. Ketika saya mengubah skrip yang saya gunakan untuk bekerja dengan SDE, itu tidak berhasil karena suatu alasan. Metode yang Anda sebutkan tidak bekerja di SDE.
standar
6

Anda bisa mendekatinya sedikit berbeda:

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')]
dklassen
sumber
Ini tidak akan berfungsi kecuali Anda berada di GDB. Ekstensi dikembalikan untuk shapefile.
Paul
Ini harus bekerja untuk setiap kelas fitur dalam ruang kerja yang Anda atur. Termasuk shapefile - mengapa kita tidak ingin ekstensi dikembalikan?
dklassen
Karena Anda tidak dapat melakukan wildcard dengan karakter akhir ini - yang merupakan tujuan OP.
Paul
@ Paul Dimodifikasi - terima kasih atas koreksinya. Saya tidak melihat bagian "_Y".
dklassen
2
Agak nitpicky, tetapi Anda harus menggunakan os.path.splitext(). Shapefile dapat memiliki periode dalam namanya. +1
Paul
1

Skrip ini menentukan beberapa wildcard dalam daftar cases[]. Daripada melingkupi kasus unik, daftar kelas fitur yang diinginkan 'arcpy.ListFeatureClasses ()'. Setiap kelas fitur yang dipilih ditambahkan ke daftar kelas fitur baru menggunakan '.extend'

# 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)
maycca
sumber