如何使用ArcPy删除选定的行?


10

我想删除要素类中的所有行,但保留第1至5行。另一方面,我想保留前五行并删除其他行。我知道我必须使用搜索光标和更新光标,但是我不能使用它们。如何使用ArcPy删除行?


1
通过属性“ FID”> 4选择并使用arcpy.Deletefeatures
FelixIP,2015年

出于好奇,您为什么不能使用游标?
fatih_dur

@fatih_dur,因为我是Arcpy的初学者
BBG_GIS

导入arcpy fc = r'C:\ temp \ test.gdb \ tmp'expression =“ objectid> 5” with arcpy.da.UpdateCursor(fc,“ OBJECTID”,where_clause = expression)作为光标:用于光标中的行:if row [0]> 5:cursor.deleteRow()
kumar

Answers:


24

您可以使用Update Cursor来根据您的条件删除行。在此示例中,删除了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()

或者,使用“ 按属性选择图层(数据管理)”

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用于在系统资源允许的情况下保留原始功能。一个问题,如果OID不是从1开始并且不连续,该怎么办?
fatih_dur

@亚伦谢谢。是否可以使用对象ID字段类型代替“ OBJECTID”名称。因为在某些层中,对象ID的名称不同。
BBG_GIS

@faith_dur注意将“ OID”和“ OBJECTID”等同;源格式指示行为。shapefile的OID rowid列是不可变的(从零开始),而企业或文件地理数据库OBJECTID在初始化后保留值(通常是从一开始)。您确实有一个好处,那就是必须使用带有ORDER BY和LIMIT的SQL子查询来标识当前的前5行。
文斯(Vince)2015年

1
@wetland是的,您可以使用OID@令牌-只需将“ OBJECTID”替换为“ OID @”。
亚伦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.