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