import arcpy
import os
arcpy.env.workspace = r"pathto.gdb"
arcpy.env.overwriteOutput = True
# in_features = arcpy.GetParameterAsText(0)
in_features = r"pathtoPointDistance.shp"
# near_features = arcpy.GetParameterAsText(1)
near_features = r"pathtonearfeatures.lyr"
# search_radius = arcpy.GetParameterAsText(2)
search_radius = "20 Meters"
#records_return = arcpy.GetParameterAsText(3)
records_return = 5
# out_table = arcpy.GetParameterAsText(4)
out_table = r"pathtoPointDistanceAnalysis\OUTPUTTABLE"
print "Processing Point Distance"
arcpy.PointDistance_analysis(in_features, near_features, out_table, search_radius)
print "Processing Sort"
arcpy.env.workspace = r"pathto.gdb"
arcpy.env.overwriteOutput = True
# I have to delete the table from memory because the sort function does not allow overwrite?
for tbl in arcpy.ListTables():
try:
print tbl
if tbl != "OUTPUTTABLE": #
arcpy.Delete_management(tbl)
except arcpy.ExecuteError:
arcpy.GetMessages(2)
#Sort by distance - This messes up the order of OBJECT ID
arcpy.Sort_management(out_table, "sorted_out_table", ["DISTANCE"])
print "Completed"
sorted_out_table = "sorted_out_table"
print "Update Cursor"
print "Adding new field FID"
arcpy.AddField_management(sorted_out_table,"FID","DOUBLE","","","","","","","")
print "Calculating FID"
#Calculate FID using codeblock - THIS WORKS - TESTED
arcpy.CalculateField_management(sorted_out_table, "FID", "autoIncrement()", "PYTHON_9.3", "rec=0\\ndef autoIncrement():\\n global rec\\n pStart = 1 #adjust start value, if req'd \\n pInterval = 1 #adjust interval value, if req'd\\n if (rec == 0): \\n rec = pStart \\n else: \\n rec = rec + pInterval \\n return rec\\n")
print "Deleting Rows"
#FAILS BELOW
rows = arcpy.UpdateCursor(sorted_out_table,"FID > '%d'" %(records_return,) ,"","")
for row in rows:
print row.getValue("FID")
rows.deleteRow(row)
del row, rows
print "Done Updating now deleting"
print "Deleted"
Hi,
I am not particularly great with python so I'm guessing that %d thing in the whereclause of the cursor is some clever pyhton thing going on? My suggestion is to simplify that into something like:
sql = r"FID > " + str(records_return)
Then place the whereclause with sql string in the update cursor, its also makes it a lot easier to understand and debug!
Also check that you are using the correct syntax for the field name, do you put in [] for example (e.g. [FID] > .....)?
Just an idea...
Duncan
import arcpy
import os
arcpy.env.workspace = r"pathto.gdb"
arcpy.env.overwriteOutput = True
in_features = arcpy.GetParameterAsText(0)
near_features = arcpy.GetParameterAsText(1)
search_radius = arcpy.GetParameterAsText(2)
records_return = arcpy.GetParameterAsText(3)
out_table = r"PathtoOutTable.dbf"
arcpy.AddMessage("Processing Point Distance")
arcpy.PointDistance_analysis(in_features, near_features, out_table, search_radius)
arcpy.AddMessage("Completed Point Distance")
arcpy.env.workspace = r"pathto.gdb"
arcpy.env.overwriteOutput = True
arcpy.AddMessage("Deleting Previous Tables")
for tbl in arcpy.ListTables():
try:
print tbl
if tbl != "TestingSort":
arcpy.Delete_management(tbl)
except arcpy.ExecuteError:
arcpy.GetMessages(2)
del tbl
arcpy.AddMessage("Completed Deleting Tables")
arcpy.AddMessage("Processing Sort")
arcpy.Sort_management(out_table, "sorted_out_table", ["DISTANCE"])
arcpy.AddMessage("Completed Sorting Tables")
sorted_out_table = "sorted_out_table"
arcpy.AddMessage("Adding new field FID")
arcpy.AddField_management(sorted_out_table,"FID","DOUBLE","","","","","","","")
arcpy.AddMessage("Completed New Field FID")
arcpy.AddMessage("Calculating FID")
arcpy.CalculateField_management(sorted_out_table, "FID", "autoIncrement()", "PYTHON_9.3", "rec=0\\ndef autoIncrement():\\n global rec\\n pStart = 1 #adjust start value, if req'd \\n pInterval = 1 #adjust interval value, if req'd\\n if (rec == 0): \\n rec = pStart \\n else: \\n rec = rec + pInterval \\n return rec\\n")
arcpy.AddMessage("Completed Calculation")
arcpy.AddMessage("Search Cursor to delete rows")
sql = r"FID > " + str(records_return)
rows = arcpy.UpdateCursor(sorted_out_table,sql,"","")
arcpy.AddMessage("Processing Update Cursor")
for row in rows:
rows.deleteRow(row)
del row, rows
arcpy.AddMessage("Deleted Rows")
Remove row from rows.deleteRow(row)
for row in rows: rows.deleteRow() del row, rows