Jak usunąć wybrane wiersze za pomocą ArcPy?

10

Chcę usunąć wszystkie wiersze w klasie obiektów, ale pozostaną wiersze od 1 do 5. Z drugiej strony chcę pozostać pierwszych pięć wierszy i usunąć inne. Wiem, że muszę użyć kursora wyszukiwania i zaktualizować kursor, ale nie mogłem ich użyć. Jak mogę usunąć wiersze za pomocą ArcPy?

BBG_GIS
źródło
1
Wybierz według atrybutu „FID”> 4 i użyj arcpy. Definicje
FelixIP
Po prostu z curoisty, dlaczego nie możesz użyć kursorów?
fatih_dur
@fatih_dur, bo jestem początkującym w Arcpy
BBG_GIS
import arcpy fc = r'C: \ temp \ test.gdb \ tmp 'expression = "objectid> 5" with arcpy.da.UpdateCursor (fc, "OBJECTID", where_clause = expression) jako kursor: dla wiersza w kursorze: jeśli wiersz [0]> 5: kursor.deleteRow ()
kumar

Odpowiedzi:

24

Możesz użyć kursora aktualizacji, aby usunąć wiersze w zależności od twoich warunków. W tym przykładzie wszystkie wiersze, w których usunięto 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()

Możesz też użyć opcji Wybierz warstwę według atrybutu (zarządzanie danymi) .

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"))
Aaron
źródło
+1 za zachowanie oryginalnych funkcji, o ile pozwalają na to zasoby systemowe. Jedno pytanie, co zrobić, jeśli identyfikatory OID nie zaczynają się od 1 i nie są kolejne?
fatih_dur
@Aaron Thanks. Czy można użyć typu pola identyfikator obiektu zamiast nazwy „OBJECTID”. ponieważ w niektórych warstwach nazwa identyfikatora obiektu jest inna.
BBG_GIS
@faith_dur Uważaj na zrównanie „OID” i „OBJECTID”; format źródłowy określa zachowanie. Kolumna OID wierszy plików kształtów jest niezmienna (i oparta na zerach), podczas gdy geobaza danych przedsiębiorstwa lub pliku OBJECTID zachowuje wartość po inicjalizacji (i zwykle jest oparta na jednej). Masz rację, że podkwerenda SQL z ORDER BY i LIMIT byłaby konieczna do zidentyfikowania bieżących pierwszych 5 wierszy.
Vince
1
@wetland Tak, możesz użyć OID@tokena - po prostu zamień „OBJECTID” na „OID @”.
Aaron