ArcPy का उपयोग करके चयनित पंक्तियों को कैसे हटाएं?


10

मैं एक फीचर क्लास में सभी पंक्तियों को हटाना चाहता हूं, लेकिन पंक्तियों को 1 से 5 तक बनाए रखना चाहता हूं। दूसरी तरफ मैं पहली पांच पंक्तियों में रहना चाहता हूं और दूसरों को हटाना चाहता हूं। मुझे पता है कि मुझे खोज कर्सर और अद्यतन कर्सर का उपयोग करना है लेकिन मैं उनका उपयोग नहीं कर सकता। मैं आर्कपी का उपयोग करके पंक्तियों को कैसे हटा सकता हूं?


1
विशेषता "FID"> 4 द्वारा चयन करें और arcpy.Deletefeatures का उपयोग करें
FelixIP

सिर्फ घिनौनेपन से बाहर, आप श्रापियों का इस्तेमाल क्यों नहीं कर सकते?
fatih_dur

@fatih_dur क्योंकि मैं अर्की में शुरुआती हूं
BBG_GIS

आयात चापलूसी fc = r'C: \ temp \ test.gdb \ tmp 'अभिव्यक्ति = "objectid> 5" के साथ arcpy.da.UpdateCursor (fc, "OBJECTID", जहाँ कर्सर के रूप में पंक्ति के लिए जहां _clause = व्यंजक): if पंक्ति [0]> 5: कर्सर.deleteRow ()
कुमार

जवाबों:


25

आप अपनी शर्तों के आधार पर पंक्तियों को हटाने के लिए एक अपडेट कर्सर का उपयोग कर सकते हैं। इस उदाहरण में, कोई पंक्तियाँ जहाँ OBJECTID> 5 हटा दी गई है।

import arcpy

fc = r'C:\temp\test.gdb\tmp'

with arcpy.da.UpdateCursor(fc, "OBJECTID") as cursor:
    for row in cursor:
        if row[0] > 5:
            cursor.deleteRow()

वैकल्पिक रूप से, Select Layer By Attribute (डेटा प्रबंधन) का उपयोग करें

import arcpy, os

fc = r'C:\temp\test.gdb\tmp'
outws = r'C:\temp\test.gdb'

# Make a layer from the feature class
arcpy.MakeFeatureLayer_management(fc, "fc_lyr")

# Use a SQL query to select OBJECTID 1 - 5
arcpy.SelectLayerByAttribute_management("fc_lyr", "", ' "OBJECTID" <= 5 ')

# Write the selected features to a new feature class
arcpy.CopyFeatures_management("fc_lyr", os.path.join(outws, "fc_out"))

जब तक सिस्टम संसाधन अनुमति देते हैं, तब तक मूल सुविधाओं को रखने के लिए +1। एक सवाल, क्या होगा अगर OID 1 से शुरू नहीं होते हैं और लगातार नहीं होते हैं?
fatih_dur

@ एरॉन थैंक्स। क्या "OBJECTID" नाम के बजाय ऑब्जेक्ट आईडी फ़ील्ड प्रकार का उपयोग करना संभव है। क्योंकि कुछ परतों में ऑब्जेक्ट आईडी का नाम अलग है।
BBG_GIS

@ ओफ़िथ_डूर "ओआईडी" और "ओबीजेक्टिड" के साथ सावधान रहें; स्रोत प्रारूप व्यवहार को निर्धारित करता है। शेपफाइल्स का OID पंक्तिबद्ध स्तंभ अपरिवर्तनीय (और शून्य आधारित) है, जबकि एक उद्यम या फ़ाइल जियोडैटेबस OBJECTID आरंभीकरण के बाद मूल्य रखता है (और आमतौर पर एक-आधारित है)। आपके पास एक अच्छा बिंदु है कि एक ORDER BY और LIMIT के साथ एक SQL सबक्वेरी को पहले 5 पंक्तियों की पहचान करने के लिए आवश्यक होगा।
विंस

1
@wetland हाँ, आप OID@टोकन का उपयोग कर सकते हैं - बस "OBJECTID" को "OID @" से बदलें।
आरोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.