Utilizzo di più parametri jolly con arcpy.ListFeatureClasses


12

So che deve esserci un modo per farlo, ma ho difficoltà a capire come farlo. Vorrei creare un elenco di classi di caratteristiche su cui eseguire le operazioni, tuttavia desidero che l'elenco contenga classi di caratteristiche che hanno 2 identificatori di nomi di file separati e distinti. Il codice sarebbe simile a:

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

So che OR non è corretto, c'è un modo per farlo senza dover riscrivere il codice per lavorare con il secondo carattere jolly. Grazie per aver aiutato la gotta, so che esiste un metodo di selezione in Seleziona per attributi che consente l'uso multiplo di caratteri jolly utilizzando l'istruzione OR.


Il parametro jolly accetta solo una stringa come input, quindi a corto di esecuzione ListFeatureClasses()due volte (che potrebbe essere troppo lento per le directory di grandi dimensioni, è meglio non passare alcun jolly e quindi filtrare il risultato dopo.
Paul

Paul, questo è esattamente ciò che fa la risposta di comprensione dell'elenco seguente: scorre l'elenco e lo filtra in base all'istruzione if.
dklassen,

@dklassen, OP sta cercando FC che termina in "_Y", non inizia. Puoi jolly su un GDB, ma non sui file di forma con il tuo codice.
Paul,

Risposte:


16

Aggiungi i due insieme, sono solo elenchi.

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

Per eliminare i duplicati:

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

Questo funziona anche, grazie a Jason Sheirer, usando startwith e endwith per me in un file GDB. Quando ho modificato lo script che stavo usando per lavorare con un SDE, non ha funzionato per qualche motivo. Il metodo che hai citato funziona in SDE.
standard

6

Potresti affrontarlo in modo leggermente diverso:

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')]

Questo non funzionerà davvero se non sei in un GDB. L'estensione viene restituita per gli shapefile.
Paul,

Questo dovrebbe funzionare per qualsiasi classe di funzionalità all'interno dell'area di lavoro impostata. Compresi gli shapefile: perché non dovremmo voler restituire un'estensione?
dklassen,

Perché con questo non si può jolly con caratteri finali - che è ciò che OP sembra fare.
Paul,

@Paul Modified - grazie per la correzione. Non ho visto la parte "_Y".
dklassen,

2
Un po 'nitido, ma dovresti usare os.path.splitext(). Lo shapefile potrebbe avere un punto nel nome. +1
Paolo,

1

Questo script specifica più caratteri jolly in un elenco cases[]. Di conseguenza, passa sopra casi unici, elencando le classi di caratteristiche desiderate 'arcpy.ListFeatureClasses ()'. Ogni classe caratteristica selezionata è quella aggiunta al nuovo elenco di classi caratteristiche usando '.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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.