Використання декількох параметрів підстановки з arcpy.ListFeatureClasses


12

Я знаю, що повинен бути спосіб це зробити, але у мене виникають проблеми з розгадами, як це зробити. Я хотів би створити список класів функцій для виконання операцій, однак, я хочу, щоб у списку містилися класи функцій, які мають 2 окремих і різних ідентифікатора імен файлів. Код виглядатиме приблизно так:

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

Я знаю, що АБО невірно, проте чи є спосіб зробити це без необхідності повторного написання коду для роботи з другим символом. Дякую за те, що допомогла подагрі, я знаю, що у Select By Attributes існує метод вибору, який дозволяє використовувати декілька підстановок із використанням оператора OR.


Параметр підстановки бере лише рядок як вхідний, тому не вистачає запуску ListFeatureClasses()двічі (що потенційно може бути занадто повільним для великих каталогів, найкраще пропустити ніяку підстановку, а потім просто відфільтрувати результат після.
Пол,

Пол, саме так і відповідає відповідь на розуміння списку нижче - він проходить через список і фільтрує його на основі заяви if.
dklassen

@dklassen, OP шукає ФК, який закінчується в "_Y", а не починається. Ви можете підкреслити це проти GDB, але не формувати файли зі своїм кодом.
Пол,

Відповіді:


16

Додайте два разом, вони просто списки.

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

Для усунення дублікатів:

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

Це також працює, дякуючи @Jason Sheirer, використовуючи startwith і endwith, працює для мене у файлі GDB. Коли я змінив сценарій, який використовував для роботи з SDE, він чомусь не спрацював. Спосіб, який ви згадали, працює в SDE.
стандарт

6

Ви можете підійти до цього дещо інакше:

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

Це не спрацює, якщо ви не знаходитесь в GDB. Розширення повертається для shapefiles.
Пол,

Це має працювати для будь-якого класу функцій у встановленому робочому просторі. У тому числі форм-файли - чому ми не хочемо повернення розширення?
dklassen

Тому що ви не можете підкреслити це проти символів, що закінчуються, - це, як виглядає, робить ОП.
Пол,

@Paul Змінено - дякую за виправлення. Я не бачив "_Y" частини.
dklassen

2
Трохи прискіпливий, але вам варто скористатися os.path.splitext(). Файл форми може мати назву в періоді. +1
Пол,

1

Цей скрипт визначає декілька підстановок у списку cases[]. Чим він перетворюється на унікальні випадки, перелічуючи потрібні класи функцій 'arcpy.ListFeatureClasses ()'. Кожен обраний клас функцій є тим, що додається до нового списку класів функцій за допомогою ".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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.