การใช้พารามิเตอร์ตัวแทนหลายรายการพร้อมกับ arcpy.ListFeatureClasses


12

ฉันรู้ว่าต้องมีวิธีการทำเช่นนี้ แต่ฉันมีปัญหาในการหาวิธีการทำเช่นนั้น ฉันต้องการสร้างรายการของฟีเจอร์คลาสเพื่อทำการดำเนินการอย่างไรก็ตามฉันต้องการให้ลิสต์นั้นมีคลาสของฟีเจอร์ที่มีตัวระบุชื่อไฟล์ที่แตกต่างกัน 2 รายการ รหัสจะมีลักษณะดังนี้:

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

ฉันรู้ว่า OR ไม่ถูกต้อง แต่มีวิธีการบางอย่างนี้โดยไม่ต้องเขียนโค้ดเพื่อทำงานกับ wildcard ตัวที่สอง ขอบคุณที่ช่วยเกาต์ฉันรู้ว่ามีวิธีการเลือกใน Select By Attributes ซึ่งอนุญาตให้ใช้สัญลักษณ์ตัวแทนหลายรายการโดยใช้คำสั่ง OR


พารามิเตอร์ wildcard ใช้สตริงเป็นอินพุตดังนั้นจึงรันไม่นานListFeatureClasses()สองครั้ง (ซึ่งอาจช้าเกินไปสำหรับไดเรกทอรีขนาดใหญ่เป็นการดีที่สุดที่จะไม่ต้องใช้อักขระตัวแทนแล้วกรองผลลัพธ์หลังจากนั้น
Paul

พอลนั่นคือสิ่งที่รายการคำตอบความเข้าใจด้านล่างทำ - มันวิ่งผ่านรายการและกรองตามคำสั่ง if
dklassen

@dklassen, OP กำลังค้นหา FC ที่ลงท้ายด้วย "_Y" ไม่เริ่ม คุณสามารถใช้สัญลักษณ์แทนนั้นเทียบกับ 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 ส่วนขยายถูกส่งคืนสำหรับ shapefiles
Paul

สิ่งนี้ควรใช้ได้กับคลาสคุณลักษณะใด ๆ ภายในพื้นที่ทำงานที่คุณตั้งไว้ รวมถึง shapefiles - ทำไมเราไม่ต้องการให้นามสกุลกลับมา?
dklassen

เพราะคุณไม่สามารถใช้สัญลักษณ์แทนตัวอักษรนี้กับตัวละครที่ลงท้ายด้วยซึ่งเป็นสิ่งที่ OP ต้องการทำ
Paul

@Paul Modified - ขอบคุณสำหรับการแก้ไข ฉันไม่เห็นส่วน "_Y"
dklassen

2
บิต nitpicky os.path.splitext()แต่คุณควรใช้ Shapefile อาจมีจุดในชื่อ +1
Paul

1

สคริปต์นี้ระบุ wildcard หลายรายการในรายการ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.