ArcPy kullanarak seçilen satırlar nasıl silinir?


10

Bir özellik sınıfındaki tüm satırları silmek istiyorum, ancak 1 - 5 arasındaki satırlar olarak kalıyorum. Diğer yandan ilk beş satır olarak kalmak ve diğerlerini silmek istiyorum. Arama imlecini ve güncelleme imlecini kullanmam gerektiğini biliyorum ama kullanamadım. ArcPy kullanarak satırları nasıl silebilirim?


1
"FID"> 4 özelliğine göre seçin ve arcpy kullanın. Özellikler
FelixIP

Sadece curoisty'den, neden imleç kullanamıyorsun?
fatih_dur

@fatih_dur çünkü Arcpy'de yeni başlıyorum
BBG_GIS

imleç olarak arcpy fc = r'C: \ temp \ test.gdb \ tmp 'expression = "objectid> 5" ile imleç: imleçteki satır için: if satır [0]> 5: cursor.deleteRow ()
kumar

Yanıtlar:


25

Koşullarınıza göre satırları silmek için bir Güncelleme İmleci kullanabilirsiniz . Bu örnekte, NESNE KİMLİĞİ> 5 olan tüm satırlar silinir.

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

Alternatif olarak, Özelliğe Göre Katman Seç (Veri Yönetimi) seçeneğini kullanın .

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

Sistem kaynaklarını izin verdiği sürece orijinal özellikleri korumak için +1. Bir soru, ya OID'ler 1'den başlamaz ve ardışık değilse?
fatih_dur

@Aaron Teşekkürler. "NESNE KİMLİĞİ" adı yerine nesne tanıtıcısı alan türü kullanılabilir mi? çünkü bazı katmanlarda nesne tanıtıcısının adı farklıdır.
BBG_GIS

@faith_dur "OID" ve "OBJECTID" ifadelerini eşitlemeye dikkat edin; kaynak biçimi davranışı belirler. Şekil dosyalarının OID satır kimliği sütunu değiştirilemez (ve sıfır tabanlı), ancak bir kuruluş veya dosya coğrafi veritabanı OBJECTID değeri başlatmadan sonra değeri korur (ve genellikle tek tabanlıdır). Geçerli ilk 5 satırı tanımlamak için ORDER BY ve LIMIT olan bir SQL alt sorgusunun gerekli olacağı iyi bir nokta var.
Vince

1
@wetland Evet, OID@jetonu kullanabilirsiniz - "OBJECTID" yerine "OID @" yazmanız yeterlidir.
Aaron
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.