Come eliminare le righe selezionate usando ArcPy?


10

Voglio eliminare tutte le righe in una classe di funzionalità, ma rimanere le righe da 1 a 5. D'altra parte, voglio rimanere le prime cinque righe ed eliminare altre. So che devo usare il cursore di ricerca e aggiornare il cursore ma non sono riuscito a usarli. Come posso eliminare le righe usando ArcPy?


1
Seleziona per attributo "FID"> 4 e usa arcpy.Deletefeatures
FelixIP

Solo per curiosità, perché non hai potuto usare i cursori?
fatih_dur,

@fatih_dur perché sono un principiante in Arcpy
BBG_GIS

import arcpy fc = r'C: \ temp \ test.gdb \ tmp 'expression = "objectid> 5" con arcpy.da.UpdateCursor (fc, "OBJECTID", where_clause = espressione) come cursore: per riga nel cursore: if riga [0]> 5: cursor.deleteRow ()
kumar il

Risposte:


24

È possibile utilizzare un cursore di aggiornamento per eliminare le righe in base alle proprie condizioni. In questo esempio, tutte le righe in cui viene eliminato 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()

In alternativa, utilizzare Seleziona livello per attributo (Gestione dati) .

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 per mantenere le funzionalità originali finché le risorse di sistema lo consentono. Una domanda, cosa succede se gli OID non iniziano da 1 e non sono consecutivi?
fatih_dur,

@Aaron Grazie. È possibile utilizzare il tipo di campo ID oggetto anziché il nome "OBJECTID". perché in alcuni livelli il nome dell'ID oggetto è diverso.
BBG_GIS,

@faith_dur Fare attenzione a equiparare "OID" e "OBJECTID"; il formato sorgente determina il comportamento. La colonna rowid OID di shapefile è immutabile (e basata su zero), mentre un geodatabase aziendale o file OBJECTID mantiene il valore dopo l'inizializzazione (e di solito è basato su uno). Hai un buon punto sul fatto che una sottoquery SQL con ORDER BY e LIMIT sarebbe necessaria per identificare le prime 5 righe correnti.
Vince,

1
@wetland Sì, è possibile utilizzare il OID@token: è sufficiente sostituire "OBJECTID" con "OID @".
Aaron
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.