Sử dụng nhiều tham số ký tự đại diện với arcpy.ListFeatureC Cầu


12

Tôi biết phải có một cách để làm điều này nhưng tôi gặp khó khăn khi tìm ra cách để làm điều đó. Tôi muốn tạo một danh sách các lớp đối tượng để thực hiện các thao tác, tuy nhiên, tôi muốn có danh sách chứa các lớp đối tượng có 2 định danh tên tệp riêng biệt và riêng biệt. Mã này sẽ trông giống như:

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

Tôi biết OR không chính xác, tuy nhiên, có một số cách để làm điều này mà không phải viết lại mã để làm việc với ký tự đại diện thứ hai. Cảm ơn bạn đã giúp đỡ bệnh gút, tôi biết có một phương pháp lựa chọn trong Chọn theo thuộc tính cho phép sử dụng nhiều ký tự đại diện bằng cách sử dụng câu lệnh OR.


Tham số ký tự đại diện chỉ lấy một chuỗi làm đầu vào, do đó không chạy ListFeatureClasses()hai lần (có thể quá chậm đối với các thư mục lớn, tốt nhất là không chuyển ký tự đại diện và sau đó chỉ lọc qua kết quả sau.
Paul

Paul, đó chính xác là những gì câu trả lời hiểu danh sách dưới đây thực hiện - nó chạy qua danh sách và lọc nó dựa trên câu lệnh if.
dklassen

@dklassen, OP đang tìm kiếm FC kết thúc bằng "_Y", không bắt đầu. Bạn có thể ký tự đại diện chống lại GDB, nhưng không tạo hình với mã của bạn.
Paul

Câu trả lời:


16

Thêm hai cái lại với nhau, chúng chỉ là danh sách.

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

Để loại bỏ trùng lặp:

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

Điều này cũng hoạt động, cảm ơn @Jason Sheirer, sử dụng startedwith và endswith hoạt động cho tôi trong một tệp GDB. Khi tôi thay đổi tập lệnh mà tôi đang sử dụng để làm việc với SDE, vì một số lý do, nó không hoạt động. Phương pháp bạn đề cập không hoạt động trong SDE.
tiêu chuẩn

6

Bạn có thể tiếp cận nó một chút khác nhau:

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

Điều này sẽ không thực sự hoạt động trừ khi bạn ở trong GDB. Phần mở rộng được trả về cho shapefiles.
Paul

Điều này sẽ làm việc cho bất kỳ lớp tính năng nào trong không gian làm việc được thiết lập của bạn. Bao gồm cả shapefiles - tại sao chúng tôi không muốn tiện ích mở rộng được trả về?
dklassen

Bởi vì bạn không thể ký tự đại diện với điều này chống lại các ký tự kết thúc - đó là những gì OP dường như đang làm.
Paul

@Paul Sửa đổi - cảm ơn đã sửa. Tôi đã không thấy phần "_Y".
dklassen

2
Một chút nitpicky, nhưng bạn nên sử dụng os.path.splitext(). Các shapefile có thể có một khoảng thời gian trong tên. +1
Paul

1

Tập lệnh này chỉ định nhiều ký tự đại diện trong danh sách cases[]. Hơn nó lặp lại các trường hợp duy nhất, liệt kê các lớp tính năng mong muốn 'arcpy.ListFeatureC Cầu ()'. Mỗi lớp đối tượng được chọn sẽ được thêm vào danh sách mới của các lớp đối tượng sử dụng '.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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.