Arcpy.ListFeatureClasses के साथ कई वाइल्डकार्ड मापदंडों का उपयोग करना


12

मुझे पता है कि ऐसा करने का एक तरीका होना चाहिए लेकिन मुझे यह पता लगाने में परेशानी हो रही है कि ऐसा कैसे किया जाए। मैं संचालन करने के लिए फीचर कक्षाओं की एक सूची बनाना चाहूंगा, हालांकि, मैं चाहता हूं कि सूची में ऐसी फीचर कक्षाएं हों, जिनमें 2 अलग और विशिष्ट फ़ाइल नाम पहचानकर्ता हों। कोड कुछ इस तरह दिखाई देगा:

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

मुझे पता है कि OR गलत है, लेकिन क्या ऐसा करने का कोई तरीका है, जिसमें दूसरे वाइल्डकार्ड के साथ काम करने के लिए कोड लिखने की आवश्यकता नहीं है। गाउट की मदद करने के लिए धन्यवाद, मुझे पता है कि Select By Attributes में एक चयन विधि है जो OR स्टेटमेंट का उपयोग करके कई वाइल्डकार्ड के उपयोग की अनुमति देता है।


वाइल्डकार्ड पैरामीटर केवल इनपुट के रूप में एक स्ट्रिंग लेता है, इसलिए ListFeatureClasses()दो बार चलने की कमी (जो संभवतः बड़ी निर्देशिकाओं के लिए बहुत धीमी हो सकती है, यह कोई वाइल्डकार्ड पारित करने के लिए सबसे अच्छा है और उसके बाद परिणाम के माध्यम से फ़िल्टर करें।
पॉल

पॉल, जो कि सूची बोधगम्य उत्तर नीचे देता है - यह सूची के माध्यम से चलता है और यदि यह कथन के आधार पर इसे फ़िल्टर करता है।
15 अक्टूबर को dklassen

@dklassen, ओपी एफसी की तलाश कर रहा है जो "_Y" में समाप्त होता है, शुरू नहीं। आप एक GDB के खिलाफ वाइल्डकार्ड कर सकते हैं, लेकिन अपने कोड के साथ नहीं।
पॉल

जवाबों:


16

दोनों को एक साथ जोड़ें, वे केवल सूचियाँ हैं।

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

डुप्लिकेट को समाप्त करने के लिए:

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

यह भी काम करता है, धन्यवाद @Jason Sheirer, स्टार्टस्विथ और एंडविथ का उपयोग करके मेरे लिए एक फ़ाइल GDB में काम करता है। जब मैंने उस स्क्रिप्ट को बदल दिया जिसका उपयोग मैं एसडीई के साथ काम करने के लिए कर रहा था, तो यह किसी कारण से काम नहीं कर रहा था। आपके द्वारा बताई गई विधि 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')]

यह वास्तव में तब तक काम नहीं करेगा जब तक आप जीडीबी में नहीं हैं। आकृति के लिए एक्सटेंशन वापस कर दिया गया है।
पॉल

यह आपके सेट कार्यक्षेत्र के भीतर किसी भी सुविधा वर्ग के लिए काम करना चाहिए। शेपफाइल्स सहित - हम एक एक्सटेंशन क्यों नहीं चाहते हैं?
dklassen

क्योंकि आप पात्रों को समाप्त करने के खिलाफ इसके साथ वाइल्डकार्ड नहीं कर सकते हैं - जो कि ओपी करता दिख रहा है।
पॉल

@ पाओल संशोधित - सुधार के लिए धन्यवाद। मैंने "_Y" भाग नहीं देखा।
dklassen

2
थोड़ा सा नाइटपिक, लेकिन आपको उपयोग करना चाहिए os.path.splitext()। आकार आकृति नाम में एक अवधि हो सकती है। +1
पॉल

1

यह स्क्रिप्ट एक सूची cases[] में कई वाइल्डकार्ड निर्दिष्ट करती है । यह विशिष्ट मामलों की तुलना में लूप्स से अधिक है, जो वांछित फीचर क्लासेस 'आर्कपी.लिफ्टफुरेक्लासेस ()' को सूचीबद्ध करता है। प्रत्येक चयनित सुविधा वर्ग '.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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.