¿Cómo eliminar filas seleccionadas usando ArcPy?

10

Quiero eliminar todas las filas de una clase de entidad, pero seguiré siendo las filas 1 a 5. Por otro lado, quiero permanecer las primeras cinco filas y eliminar otras. Sé que tengo que usar el cursor de búsqueda y actualizar el cursor, pero no pude usarlos. ¿Cómo puedo eliminar las filas con ArcPy?

BBG_GIS
fuente
1
Seleccione por atributo "FID"> 4 y use arcpy.Deletefeatures
FelixIP
Solo por curiosidad, ¿por qué no podrías usar cursores?
fatih_dur
@fatih_dur porque soy principiante en Arcpy
BBG_GIS
import arcpy fc = r'C: \ temp \ test.gdb \ tmp 'expression = "objectid> 5" con arcpy.da.UpdateCursor (fc, "OBJECTID", where_clause = expresión) como cursor: para la fila en el cursor: si fila [0]> 5: cursor.deleteRow ()
kumar

Respuestas:

24

Puede usar un cursor de actualización para eliminar filas según sus condiciones. En este ejemplo, cualquier fila donde OBJECTID> 5 se elimina.

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()

Alternativamente, use Seleccionar capa por atributo (gestión de datos) .

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
fuente
+1 para mantener las características originales siempre que los recursos del sistema lo permitan. Una pregunta, ¿qué pasa si los OID no comienzan desde 1 y no son consecutivos?
fatih_dur
@ Aaron Gracias. ¿Es posible utilizar el tipo de campo de id de objeto en lugar del nombre "OBJECTID". porque en algunas capas el nombre de la identificación del objeto es diferente.
BBG_GIS
@faith_dur Tenga cuidado al equiparar "OID" y "OBJECTID"; El formato fuente dicta el comportamiento. La columna Rowid OID de shapefiles es inmutable (y está basada en cero), mientras que OBJECTID de una geodatabase de archivos o de empresa retiene el valor después de la inicialización (y generalmente está basado en uno). Tiene un buen punto de que sería necesaria una subconsulta SQL con ORDER BY y LIMIT para identificar las primeras 5 filas actuales.
Vince
1
@wetland Sí, puede usar el OID@token, simplemente reemplace "OBJECTID" con "OID @".
Aaron