arcpy.ListFeatureClasses와 함께 여러 개의 와일드 카드 매개 변수 사용


12

나는 이것을 할 방법이 있어야한다는 것을 알고 있지만 그렇게하는 방법을 알아내는 데 어려움을 겪고 있습니다. 작업을 수행하기 위해 기능 클래스 목록을 작성하고 싶지만 목록에 2 개의 개별 파일 이름 식별자가있는 기능 클래스가 포함되도록하고 싶습니다. 코드는 다음과 같습니다.

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

그러나 OR이 잘못되었다는 것을 알고 있습니다. 두 번째 와일드 카드로 작업하기 위해 코드를 다시 작성할 필요 없이이 작업을 수행 할 수있는 방법이 있습니까? 통풍을 도와 주셔서 감사합니다. Select By Attributes에는 OR 문을 사용하여 여러 와일드 카드를 사용할 수있는 선택 방법이 있습니다.


와일드 카드 매개 변수는 문자열을 입력으로 만 사용하므로 ListFeatureClasses()두 번 실행하는 것이 부족합니다 (큰 디렉토리의 경우 너무 느릴 수 있음). 와일드 카드를 전달하지 않고 결과를 필터링하는 것이 가장 좋습니다.
Paul

Paul, 그것은 바로 아래의 목록 이해 답변이하는 것입니다-목록을 통해 실행하고 if 문을 기반으로 필터링합니다.
dklassen

@dklassen, OP는 시작하지 않고 "_Y"로 끝나는 FC를 찾고 있습니다. GDB에 대해서는 와일드 카드를 사용할 수 있지만 코드로 쉐이프 파일을 만들 수는 없습니다.
Paul

답변:


16

둘을 합하면리스트 일뿐입니다.

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

중복을 제거하려면

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

@Jason Sheirer 덕분에 startswith와 endswith를 사용하여 파일 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에 있지 않으면 실제로 작동하지 않습니다. shapefile에 대한 확장자가 리턴됩니다.
Paul

설정된 작업 공간 내의 모든 피쳐 클래스에 대해 작동해야합니다. shapefile 포함-왜 우리는 확장을 반환하지 않겠습니까?
dklassen

종료 문자에 대해 와일드 카드를 사용할 수 없으므로 OP가 수행하는 것처럼 보입니다.
Paul

@Paul Modified-수정 해 주셔서 감사합니다. "_Y"부분이 보이지 않았습니다.
dklassen

2
조금 이색적이지만을 사용해야합니다 os.path.splitext(). shapefile에는 이름에 마침표가있을 수 있습니다. +1
Paul

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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.