Bagaimana cara menghapus baris yang dipilih menggunakan ArcPy?


10

Saya ingin menghapus semua baris dalam kelas fitur tetapi tetap baris 1 sampai 5. Di sisi lain saya ingin tetap lima baris pertama dan menghapus yang lain. Saya tahu bahwa saya harus menggunakan kursor pencarian dan memperbarui kursor tetapi saya tidak bisa menggunakannya. Bagaimana saya bisa menghapus baris menggunakan ArcPy?


1
Pilih berdasarkan atribut "FID"> 4 dan gunakan arcpy.Deletefeatures
FelixIP

Hanya karena curoisty, mengapa Anda tidak bisa menggunakan kursor?
fatih_dur

@fatih_dur karena saya pemula di Arcpy
BBG_GIS

import arcpy fc = r'C: \ temp \ test.gdb \ tmp 'ekspresi = "objectid> 5" dengan arcpy.da.UpdateCursor (fc, "OBJECTID", where_clause = ekspresi) sebagai kursor: untuk baris dalam kursor: jika baris [0]> 5: cursor.deleteRow ()
kumar

Jawaban:


24

Anda dapat menggunakan Kursor Pembaruan untuk menghapus baris berdasarkan kondisi Anda. Dalam contoh ini, setiap baris tempat OBJECTID> 5 dihapus.

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

Atau, gunakan Select Layer By Attribute (Manajemen Data) .

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 untuk menjaga fitur asli selama sumber daya sistem mengizinkan. Satu pertanyaan, bagaimana jika OID tidak dimulai dari 1 dan tidak berurutan?
fatih_dur

@ Harun, terima kasih. Apakah mungkin untuk menggunakan tipe bidang id objek alih-alih nama "OBJECTID". karena di beberapa lapisan nama objek id berbeda.
BBG_GIS

@faith_dur Berhati-hatilah dengan menyamakan "OID" dan "OBJECTID"; format sumber menentukan perilaku. Kolom rowid OID dari shapefile tidak dapat diubah (dan berbasis nol), sedangkan suatu perusahaan atau file geodatabase OBJECTID mempertahankan nilai setelah inisialisasi (dan biasanya berbasis satu). Anda memang memiliki poin yang baik bahwa subquery SQL dengan ORDER BY dan LIMIT akan diperlukan untuk mengidentifikasi 5 baris pertama saat ini.
Vince

1
@wetland Ya, Anda dapat menggunakan OID@token - cukup ganti "OBJECTID" dengan "OID @".
Aaron
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.