我正在尝试删除面积最大的多边形shapefile中的特征。我在属性表中具有面积的列,并且可以生成具有最大面积的变量。但是我无法将此变量传递到循环中以使用光标删除功能。
当我在脚本中插入实际数字(而不是变量)时,它可以正常工作。但是,我无法通过循环识别下面的变量“ y”。
import arcpy
fc = "test.shp"
cursor = arcpy.da.UpdateCursor(fc, ["TEST"])
x = max(cursor)
y = int(x[0])
for row in cursor:
if row[0]==y:
cursor.deleteRow()
del row
del cursor
我希望这段代码可以删除shapefile中面积最大的一个功能,但是似乎变量没有传递到循环中。
答案 0 :(得分:0)
您需要使用一个单独的光标来获取最大值。请参见下面的示例。
import arcpy
fc = "test.shp"
with arcpy.da.SearchCursor(fc, ['Test']) as cursor:
x = max(cursor)
y = int(x[0])
with arcpy.da.UpdateCursor(fc, ['Test']) as cursor:
for row in cursor:
if row[0]==y:
cursor.deleteRow()
在可能的情况下,我将避免完全使用游标。拥有最大权限后,您可以像这样删除功能:
criteria = "Test = " + str(y)
arcpy.MakeFeatureLayer_management (fc, "DeleteRows",criteria)
arcpy.DeleteRows_management ("DeleteRows")
请注意,以任何一种方式编写的代码都将删除具有最大值的所有功能,而不仅仅是第一个。