Як видалити вибрані рядки за допомогою ArcPy?


10

Я хочу видалити всі рядки в класі функцій, але залишатись рядками від 1 до 5. З іншого боку, я хочу залишитися першими п’ятьма рядками та видалити інші. Я знаю, що мені потрібно використовувати курсор пошуку та оновити курсор, але я не міг їх використовувати. Як я можу видалити рядки за допомогою ArcPy?


1
Виберіть за атрибутом "FID"> 4 та використовуйте arcpy.Deletefeatures
FelixIP

Щойно з куроїсти, чому ви не могли використовувати курсори?
fatih_dur

@fatih_dur, тому що я початківець у Arcpy
BBG_GIS

імпортувати arcpy fc = r'C: \ temp \ test.gdb \ tmp'pression = "objectid> 5" з arcpy.da.UpdateCursor (fc, "OBJECTID", де_clause = вираз) як курсор: для рядка в курсорі: якщо рядок [0]> 5: cursor.deleteRow ()
Kumar

Відповіді:


24

Ви можете використовувати курсор оновлення для видалення рядків відповідно до ваших умов. У цьому прикладі будь-які рядки, де 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 Attack (Управління даними) .

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

@Aaron Дякую Чи можна використовувати тип поля ідентифікатора об'єкта замість імені "OBJECTID". тому що в деяких шарах назва ідентифікатора об'єкта різна.
BBG_GIS

@faith_dur Будьте уважні до рівнянь "OID" та "OBJECTID"; вихідний формат диктує поведінку. Стовпчастий стовпчик форматів OID незмінний (і заснований на нулі), тоді як підприємство або файл OBJECTID геоданих баз даних зберігає значення після ініціалізації (і, як правило, одноосновний). У вас є хороший момент, що для ідентифікації поточних перших 5 рядків необхідний підзапит SQL з ORDER BY і LIMIT.
Вінс

1
@wetland Так, ви можете використовувати OID@маркер - просто замініть "OBJECTID" на "OID @".
Аарон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.