<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: problem with nested while loops in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/problem-with-nested-while-loops/m-p/33688#M2620</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;oups, thanks - didn't know about that&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It's not deleting the right row...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;# ---------------------------------------------------------------------------
# IterativeNearAnalysis.py
# Created on: thu oct 19 2011&amp;nbsp; by Amelie Davis
# Takes all shapefiles in a folder
# if points are identical in terms of lat long, removes one point at random
# checks the distance between all points in that same shapefile is less than a specified distance
# deletes at random one of the two 'offending points'
# creates a new shapefile with only the points that are wanted
# checks the output
# final output is a .dbf of the attribute table for those points
# ---------------------------------------------------------------------------

# Import system modules
import arcpy
from arcpy import env
import os

# input shapfile
inputfile = arcpy.GetParameterAsText(0)
# default inputfile = "d:/data/leap540/52spp_withid_1000m/BCN_Birds_P_top52spamecro.shp"

#distance to look for points
dist2 = arcpy.GetParameterAsText(1)
dist = dist2 + " Meters"
# default dist2 = 500

# outputfiles
# shapefile from which points that are located at the exact same spot are removed
out1 = arcpy.GetParameterAsText(2)
# default out1 = inputfile[:-4] + "_sort.shp"
# table listing points that are within the specified distance
out2 = out1[:-4] + dist2 + "_near.dbf"
# out2 table sorted by random2 field
out3 = out2[:-4] + "_dist.dbf"
#
out4 = inputfile[:-4] + "_f.dbf"
out5 = out4[:-4] + "_check.dbf"

arcpy.AddField_management(inputfile,"RANDOM","SHORT","5","#","#","#","NULLABLE","NON_REQUIRED","#")
codeblock1= "dim max, min\nmax=99999\nmin=0\nx=(Int((max-min+1)*Rnd+min))"
arcpy.CalculateField_management(inputfile,"RANDOM","x","VB",codeblock1)
arcpy.AddField_management(inputfile,"FID_COPY","SHORT","6","#","#","#","NULLABLE","NON_REQUIRED","#")
arcpy.CalculateField_management(inputfile,"FID_COPY","[FID]","VB","#")

# delete records that are identical in latitute and longitude
# make sure the point to delete is selected at random by sorting by random
arcpy.Sort_management(inputfile,out1,"RANDOM ASCENDING","UR")
fields = ["LATITUDE","LONGITUDE"]
arcpy.DeleteIdentical_management(out1,fields,"#","0")

# generate list of points that are within a certain distance (specified by 'dist') or each other
arcpy.GenerateNearTable_analysis(out1,out1,out2,dist,"NO_LOCATION","NO_ANGLE","ALL","0")
arcpy.AddField_management(out2,"RANDOM2","SHORT","5","#","#","#","NULLABLE","NON_REQUIRED","#")
arcpy.CalculateField_management(out2,"RANDOM2","x","VB",codeblock1)
arcpy.Sort_management(out2,out3,"RANDOM2 ASCENDING","UR")
arcpy.DeleteIdentical_management(out3,"NEAR_DIST","#","0")


rows = arcpy.SearchCursor(out3)
i_fid = "IN_FID"

#a = arcpy.GetCount_management(out1)
row = rows.next()
while row:
&amp;nbsp;&amp;nbsp;&amp;nbsp; i_fid1 = row.getValue(i_fid)
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("FID of row to delete is "+ str(i_fid1))
&amp;nbsp;&amp;nbsp;&amp;nbsp; rows2 = arcpy.UpdateCursor(out1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()
&amp;nbsp;&amp;nbsp;&amp;nbsp; while row2:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i_fid2 = row2.getValue("FID_COPY")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cute = row2.getValue("L_ID")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #arcpy.AddMessage("FID of row we are on is "+str(i_fid2))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i_fid2 == i_fid1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rows2.deleteRow(row2)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("deleting row"+ " and original loc is " + str(cute))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #arcpy.AddMessage("not deleting anything")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rows2.reset()
&amp;nbsp;&amp;nbsp;&amp;nbsp; row = rows.next()
#arcpy.AddMessage("out of loop")

del row
del row2

arcpy.GenerateNearTable_analysis(out1,out1,out5,dist,"NO_LOCATION","NO_ANGLE","ALL","0")


# delete out2 and out3&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 10 Dec 2021 21:19:08 GMT</pubDate>
    <dc:creator>AmelieDavis</dc:creator>
    <dc:date>2021-12-10T21:19:08Z</dc:date>
    <item>
      <title>problem with nested while loops</title>
      <link>https://community.esri.com/t5/python-questions/problem-with-nested-while-loops/m-p/33684#M2616</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm trying to write a python script that will look for points that are within a certain distance of each other and delete one of the pair at random.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I've taken a stab at this and the program runs but it doesn't get all the points.&amp;nbsp; I think it may be a problem with the nested while loops.&amp;nbsp; I put the script below and tried to comment it as much as possible.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Can someone please give me advice on how to fix this.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Any help is greatly appreciated.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Amelie&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# ---------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# IterativeNearAnalysis.py&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# Created on: thu oct 19 2011&amp;nbsp; by Amelie Davis&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# for a shapefile in a folder&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# if points are identical in terms of lat long, removes one point at random&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# checks the distance between all points in that same shapefile is less than a specified distance&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# deletes at random one of the two 'offending points'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# creates a new shapefile with only the points that are wanted&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# checks the output&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# final output is shapefile with only points beyond the specified distance&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# ---------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# Import system modules&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;from arcpy import env&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;import os&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# input shapfile&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;inputfile = arcpy.GetParameterAsText(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# default inputfile = "d:/data/leap540/52spp_withid_1000m/BCN_Birds_P_top52spamecro.shp"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#distance to look for points&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dist2 = arcpy.GetParameterAsText(1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dist = dist2 + " Meters"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# default dist2 = 500&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# outputfiles&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# shapefile from which points that are located at the exact same spot are removed&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;out1 = arcpy.GetParameterAsText(2)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# default out1 = inputfile[:-4] + "_sort.shp"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# table listing points that are within the specified distance&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;out2 = out1[:-4] + dist2 + "_near.dbf"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# out2 table sorted by random2 field&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;out3 = out2[:-4] + "_dist.dbf"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;out4 = inputfile[:-4] + "_f.dbf"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;out5 = out4[:-4] + "_check.dbf"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.AddField_management(inputfile,"RANDOM","SHORT","5","#","#","#","NULLABLE","NON_REQUIRED","#")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;codeblock1= "dim max, min\nmax=99999\nmin=0\nx=(Int((max-min+1)*Rnd+min))"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.CalculateField_management(inputfile,"RANDOM","x","VB",codeblock1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# delete records that are identical in latitute and longitude&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# make sure the point to delete is selected at random by sorting by random&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.Sort_management(inputfile,out1,"RANDOM ASCENDING","UR")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;fields = ["LATITUDE","LONGITUDE"]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.DeleteIdentical_management(out1,fields,"#","0")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# generate list of points that are within a certain distance (specified by 'dist') or each other&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.GenerateNearTable_analysis(out1,out1,out2,dist,"NO_LOCATION","NO_ANGLE","ALL","0")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.AddField_management(out2,"RANDOM2","SHORT","5","#","#","#","NULLABLE","NON_REQUIRED","#")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.CalculateField_management(out2,"RANDOM2","x","VB",codeblock1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.Sort_management(out2,out3,"RANDOM2 ASCENDING","UR")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.DeleteIdentical_management(out3,"NEAR_DIST","#","0")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;rows = arcpy.SearchCursor(out3)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i_fid = "NEAR_FID"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;row = rows.next()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while row:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i_fid1 = row.getValue(i_fid)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("FID of row to delete is "+ str(i_fid1))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rows2 = arcpy.UpdateCursor(out1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while row2:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i_fid2 = row2.getValue("FID")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("FID of row we are on is "+str(i_fid2))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i_fid2 == i_fid1:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rows2.deleteRow(row2)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("deleting row")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("not deleting anything")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; row = rows.next()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.AddMessage("out of loop")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;del row&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;del row2&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.GenerateNearTable_analysis(out1,out1,out5,dist,"NO_LOCATION","NO_ANGLE","ALL","0")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# this table should be empty (need to implement this as a code and give an error message if not #empty.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# delete out2 and out3&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 21 Oct 2011 03:31:30 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/problem-with-nested-while-loops/m-p/33684#M2616</guid>
      <dc:creator>AmelieDavis</dc:creator>
      <dc:date>2011-10-21T03:31:30Z</dc:date>
    </item>
    <item>
      <title>Re: problem with nested while loops</title>
      <link>https://community.esri.com/t5/python-questions/problem-with-nested-while-loops/m-p/33685#M2617</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;never mind I was using FID and then deleting rows so the FIDs changed so I was deleting the wrong row after the first iteration.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;This works like I want it to:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# ---------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# IterativeNearAnalysis.py&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# Created on: thu oct 19 2011&amp;nbsp; by Amelie Davis&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# Takes all shapefiles in a folder&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# if points are identical in terms of lat long, removes one point at random&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# checks the distance between all points in that same shapefile is less than a specified distance&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# deletes at random one of the two 'offending points'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# creates a new shapefile with only the points that are wanted&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# checks the output&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# final output is a .dbf of the attribute table for those points&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# ---------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# Import system modules&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;from arcpy import env&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;import os&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# input shapfile&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;inputfile = arcpy.GetParameterAsText(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# default inputfile = "d:/data/leap540/52spp_withid_1000m/BCN_Birds_P_top52spamecro.shp"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#distance to look for points&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dist2 = arcpy.GetParameterAsText(1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dist = dist2 + " Meters"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# default dist2 = 500&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# outputfiles&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# shapefile from which points that are located at the exact same spot are removed&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;out1 = arcpy.GetParameterAsText(2)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# default out1 = inputfile[:-4] + "_sort.shp"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# table listing points that are within the specified distance&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;out2 = out1[:-4] + dist2 + "_near.dbf"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# out2 table sorted by random2 field&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;out3 = out2[:-4] + "_dist.dbf"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;out4 = inputfile[:-4] + "_f.dbf"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;out5 = out4[:-4] + "_check.dbf"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;##arcpy.AddField_management(inputfile,"RANDOM","SHORT","5","#","#","#","NULLABLE","NON_REQUIRED","#")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;codeblock1= "dim max, min\nmax=99999\nmin=0\nx=(Int((max-min+1)*Rnd+min))"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;##arcpy.CalculateField_management(inputfile,"RANDOM","x","VB",codeblock1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;##arcpy.AddField_management(inputfile,"FID_COPY","SHORT","6","#","#","#","NULLABLE","NON_REQUIRED","#")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;##arcpy.CalculateField_management(inputfile,"FID_COPY","[FID]","VB","#")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# delete records that are identical in latitute and longitude&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# make sure the point to delete is selected at random by sorting by random&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.Sort_management(inputfile,out1,"RANDOM ASCENDING","UR")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;fields = ["LATITUDE","LONGITUDE"]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.DeleteIdentical_management(out1,fields,"#","0")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# generate list of points that are within a certain distance (specified by 'dist') or each other&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.GenerateNearTable_analysis(out1,out1,out2,dist,"NO_LOCATION","NO_ANGLE","ALL","0")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.AddField_management(out2,"RANDOM2","SHORT","5","#","#","#","NULLABLE","NON_REQUIRED","#")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.CalculateField_management(out2,"RANDOM2","x","VB",codeblock1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.Sort_management(out2,out3,"RANDOM2 ASCENDING","UR")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.DeleteIdentical_management(out3,"NEAR_DIST","#","0")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;rows = arcpy.SearchCursor(out3)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i_fid = "IN_FID"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;row = rows.next()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while row:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i_fid1 = row.getValue(i_fid)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("FID of row to delete is "+ str(i_fid1))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rows2 = arcpy.UpdateCursor(out1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while row2:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i_fid2 = row2.getValue("FID_COPY")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cute = row2.getValue("L_ID")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("FID of row we are on is "+str(i_fid2))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i_fid2 == i_fid1:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rows2.deleteRow(row2)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("deleting row"+ " and original loc is " + str(cute))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("not deleting anything")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; row = rows.next()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.AddMessage("out of loop")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;del row&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;del row2&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.GenerateNearTable_analysis(out1,out1,out5,dist,"NO_LOCATION","NO_ANGLE","ALL","0")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# delete out2 and out3&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 21 Oct 2011 13:36:29 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/problem-with-nested-while-loops/m-p/33685#M2617</guid>
      <dc:creator>AmelieDavis</dc:creator>
      <dc:date>2011-10-21T13:36:29Z</dc:date>
    </item>
    <item>
      <title>Re: problem with nested while loops</title>
      <link>https://community.esri.com/t5/python-questions/problem-with-nested-while-loops/m-p/33686#M2618</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;NO, that still doesn't work.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;it's still a problem with the loops.&amp;nbsp; the second while loop does not start at the beginning of the table after it finds a match and deletes that row.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;How do I do that?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# ---------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# IterativeNearAnalysis.py&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# Created on: thu oct 19 2011&amp;nbsp; by Amelie Davis&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# Takes all shapefiles in a folder&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# if points are identical in terms of lat long, removes one point at random&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# checks the distance between all points in that same shapefile is less than a specified distance&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# deletes at random one of the two 'offending points'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# creates a new shapefile with only the points that are wanted&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# checks the output&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# final output is a .dbf of the attribute table for those points&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# ---------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# Import system modules&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;from arcpy import env&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;import os&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# input shapfile&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;inputfile = arcpy.GetParameterAsText(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# default inputfile = "d:/data/leap540/52spp_withid_1000m/BCN_Birds_P_top52spamecro.shp"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#distance to look for points&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dist2 = arcpy.GetParameterAsText(1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dist = dist2 + " Meters"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# default dist2 = 500&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# outputfiles&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# shapefile from which points that are located at the exact same spot are removed&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;out1 = arcpy.GetParameterAsText(2)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# default out1 = inputfile[:-4] + "_sort.shp"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# table listing points that are within the specified distance&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;out2 = out1[:-4] + dist2 + "_near.dbf"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# out2 table sorted by random2 field&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;out3 = out2[:-4] + "_dist.dbf"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;out4 = inputfile[:-4] + "_f.dbf"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;out5 = out4[:-4] + "_check.dbf"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.AddField_management(inputfile,"RANDOM","SHORT","5","#","#","#","NULLABLE","NON_REQUIRED","#")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;codeblock1= "dim max, min\nmax=99999\nmin=0\nx=(Int((max-min+1)*Rnd+min))"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.CalculateField_management(inputfile,"RANDOM","x","VB",codeblock1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.AddField_management(inputfile,"FID_COPY","SHORT","6","#","#","#","NULLABLE","NON_REQUIRED","#")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.CalculateField_management(inputfile,"FID_COPY","[FID]","VB","#")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# delete records that are identical in latitute and longitude&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;# make sure the point to delete is selected at random by sorting by random&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.Sort_management(inputfile,out1,"RANDOM ASCENDING","UR")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;fields = ["LATITUDE","LONGITUDE"]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.DeleteIdentical_management(out1,fields,"#","0")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# generate list of points that are within a certain distance (specified by 'dist') or each other&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.GenerateNearTable_analysis(out1,out1,out2,dist,"NO_LOCATION","NO_ANGLE","ALL","0")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.AddField_management(out2,"RANDOM2","SHORT","5","#","#","#","NULLABLE","NON_REQUIRED","#")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.CalculateField_management(out2,"RANDOM2","x","VB",codeblock1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.Sort_management(out2,out3,"RANDOM2 ASCENDING","UR")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.DeleteIdentical_management(out3,"NEAR_DIST","#","0")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;rows = arcpy.SearchCursor(out3)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i_fid = "IN_FID"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#a = arcpy.GetCount_management(out1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;row = rows.next()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while row:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i_fid1 = row.getValue(i_fid)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("FID of row to delete is "+ str(i_fid1))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rows2 = arcpy.UpdateCursor(out1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while row2:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i_fid2 = row2.getValue("FID_COPY")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cute = row2.getValue("L_ID")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #arcpy.AddMessage("FID of row we are on is "+str(i_fid2))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i_fid2 == i_fid1:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rows2.deleteRow(row2)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("deleting row"+ " and original loc is " + str(cute))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rows2.reset()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("not deleting anything")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; row = rows.next()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#arcpy.AddMessage("out of loop")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;del row&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;del row2&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.GenerateNearTable_analysis(out1,out1,out5,dist,"NO_LOCATION","NO_ANGLE","ALL","0")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# delete out2 and out3&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 21 Oct 2011 15:19:37 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/problem-with-nested-while-loops/m-p/33686#M2618</guid>
      <dc:creator>AmelieDavis</dc:creator>
      <dc:date>2011-10-21T15:19:37Z</dc:date>
    </item>
    <item>
      <title>Re: problem with nested while loops</title>
      <link>https://community.esri.com/t5/python-questions/problem-with-nested-while-loops/m-p/33687#M2619</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Since your problem is regarding loops, indentation is important -&amp;gt; use the &lt;PRE&gt; tags above the posting text box, and you'll be more likely to get a response.&lt;/PRE&gt;&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 21 Oct 2011 15:35:44 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/problem-with-nested-while-loops/m-p/33687#M2619</guid>
      <dc:creator>DarrenWiens2</dc:creator>
      <dc:date>2011-10-21T15:35:44Z</dc:date>
    </item>
    <item>
      <title>Re: problem with nested while loops</title>
      <link>https://community.esri.com/t5/python-questions/problem-with-nested-while-loops/m-p/33688#M2620</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;oups, thanks - didn't know about that&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It's not deleting the right row...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;# ---------------------------------------------------------------------------
# IterativeNearAnalysis.py
# Created on: thu oct 19 2011&amp;nbsp; by Amelie Davis
# Takes all shapefiles in a folder
# if points are identical in terms of lat long, removes one point at random
# checks the distance between all points in that same shapefile is less than a specified distance
# deletes at random one of the two 'offending points'
# creates a new shapefile with only the points that are wanted
# checks the output
# final output is a .dbf of the attribute table for those points
# ---------------------------------------------------------------------------

# Import system modules
import arcpy
from arcpy import env
import os

# input shapfile
inputfile = arcpy.GetParameterAsText(0)
# default inputfile = "d:/data/leap540/52spp_withid_1000m/BCN_Birds_P_top52spamecro.shp"

#distance to look for points
dist2 = arcpy.GetParameterAsText(1)
dist = dist2 + " Meters"
# default dist2 = 500

# outputfiles
# shapefile from which points that are located at the exact same spot are removed
out1 = arcpy.GetParameterAsText(2)
# default out1 = inputfile[:-4] + "_sort.shp"
# table listing points that are within the specified distance
out2 = out1[:-4] + dist2 + "_near.dbf"
# out2 table sorted by random2 field
out3 = out2[:-4] + "_dist.dbf"
#
out4 = inputfile[:-4] + "_f.dbf"
out5 = out4[:-4] + "_check.dbf"

arcpy.AddField_management(inputfile,"RANDOM","SHORT","5","#","#","#","NULLABLE","NON_REQUIRED","#")
codeblock1= "dim max, min\nmax=99999\nmin=0\nx=(Int((max-min+1)*Rnd+min))"
arcpy.CalculateField_management(inputfile,"RANDOM","x","VB",codeblock1)
arcpy.AddField_management(inputfile,"FID_COPY","SHORT","6","#","#","#","NULLABLE","NON_REQUIRED","#")
arcpy.CalculateField_management(inputfile,"FID_COPY","[FID]","VB","#")

# delete records that are identical in latitute and longitude
# make sure the point to delete is selected at random by sorting by random
arcpy.Sort_management(inputfile,out1,"RANDOM ASCENDING","UR")
fields = ["LATITUDE","LONGITUDE"]
arcpy.DeleteIdentical_management(out1,fields,"#","0")

# generate list of points that are within a certain distance (specified by 'dist') or each other
arcpy.GenerateNearTable_analysis(out1,out1,out2,dist,"NO_LOCATION","NO_ANGLE","ALL","0")
arcpy.AddField_management(out2,"RANDOM2","SHORT","5","#","#","#","NULLABLE","NON_REQUIRED","#")
arcpy.CalculateField_management(out2,"RANDOM2","x","VB",codeblock1)
arcpy.Sort_management(out2,out3,"RANDOM2 ASCENDING","UR")
arcpy.DeleteIdentical_management(out3,"NEAR_DIST","#","0")


rows = arcpy.SearchCursor(out3)
i_fid = "IN_FID"

#a = arcpy.GetCount_management(out1)
row = rows.next()
while row:
&amp;nbsp;&amp;nbsp;&amp;nbsp; i_fid1 = row.getValue(i_fid)
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("FID of row to delete is "+ str(i_fid1))
&amp;nbsp;&amp;nbsp;&amp;nbsp; rows2 = arcpy.UpdateCursor(out1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()
&amp;nbsp;&amp;nbsp;&amp;nbsp; while row2:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i_fid2 = row2.getValue("FID_COPY")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cute = row2.getValue("L_ID")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #arcpy.AddMessage("FID of row we are on is "+str(i_fid2))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i_fid2 == i_fid1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rows2.deleteRow(row2)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("deleting row"+ " and original loc is " + str(cute))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #arcpy.AddMessage("not deleting anything")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rows2.reset()
&amp;nbsp;&amp;nbsp;&amp;nbsp; row = rows.next()
#arcpy.AddMessage("out of loop")

del row
del row2

arcpy.GenerateNearTable_analysis(out1,out1,out5,dist,"NO_LOCATION","NO_ANGLE","ALL","0")


# delete out2 and out3&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Dec 2021 21:19:08 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/problem-with-nested-while-loops/m-p/33688#M2620</guid>
      <dc:creator>AmelieDavis</dc:creator>
      <dc:date>2021-12-10T21:19:08Z</dc:date>
    </item>
    <item>
      <title>Re: problem with nested while loops</title>
      <link>https://community.esri.com/t5/python-questions/problem-with-nested-while-loops/m-p/33689#M2621</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Maybe I should explain what I'm trying to do better:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I want to &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1) loop through all rows in a table called tableA&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2) for each row in tableA get the value inside one field called fid_N &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3) loop through a different table (tableB) and find the row where the value of this different field (fid_copy) matches fid_N so I need fid_N = fid_copy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;4) delete that row from tableB (the row where the values I got was equal)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;5) move on to the next row in tableA and then search through everysingle row in tableB again&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;6) reiterate for all rows in tableA&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Could someone just provide me with the architecture to do this please as I think I'm not implementing my while (or maybe I should be using for) loops...&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 21 Oct 2011 17:11:54 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/problem-with-nested-while-loops/m-p/33689#M2621</guid>
      <dc:creator>AmelieDavis</dc:creator>
      <dc:date>2011-10-21T17:11:54Z</dc:date>
    </item>
    <item>
      <title>Re: problem with nested while loops</title>
      <link>https://community.esri.com/t5/python-questions/problem-with-nested-while-loops/m-p/33690#M2622</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Fixed it - problem was not with my while loops NOR with the delete row function but rather with my logic and incorrect use of FIDs...&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is the correct code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
# ---------------------------------------------------------------------------
# IterativeNearAnalysis.py
# Created on: thu oct 19 2011&amp;nbsp; by Amelie Davis
# Takes all shapefiles in a folder
# if points are identical in terms of lat long, removes one point at random
# checks the distance between all points in that same shapefile is less than a specified distance
# deletes at random one of the two 'offending points'
# creates a new shapefile with only the points that are wanted
# checks the output
# final output is a .dbf of the attribute table for those points
# ---------------------------------------------------------------------------

# Import system modules
import arcpy
from arcpy import env
import os
from os import path

# input shapfile
inputfile = arcpy.GetParameterAsText(0)
# default inputfile = "d:/data/leap540/52spp_withid_1000m/BCN_Birds_P_top52spamecro.shp"

#distance to look for points
dist2 = arcpy.GetParameterAsText(1)
dist = dist2 + " Meters"
# default dist2 = 500

#workspace
wksp = arcpy.GetParameterAsText(2)
arcpy.AddMessage("Workspace is "+ wksp)
#set the workspace
arcpy.env.workspace = wksp
(dirName, fileName) = os.path.split(inputfile)

# outputfiles
# Name of output shapefile from which points that are located at the exact same spot are removed
out1 = fileName[:-4]+"_copy.shp"

# make a copy of inputfile and name it out1
arcpy.Select_analysis(inputfile,out1,"#")

# Names of output tables and shapefiles
out1_a = out1[:-4]+"_sort.shp"
out2 = out1_a[:-4] + dist2 + "_near.dbf"
out3 = out2[:-4] + "_sort2.dbf"
# final output
out4 = arcpy.GetParameterAsText(3)
# check output
out5 = out3[:-4] + "_check.dbf"

arcpy.AddField_management(out1,"RANDOM","SHORT","5","#","#","#","NULLABLE","NON_REQUIRED","#")
codeblock1= "dim max, min\nmax=99999\nmin=0\nx=(Int((max-min+1)*Rnd+min))"
arcpy.CalculateField_management(out1,"RANDOM","x","VB",codeblock1)
arcpy.AddField_management(out1,"FID_COPY","SHORT","6","#","#","#","NULLABLE","NON_REQUIRED","#")
arcpy.CalculateField_management(out1,"FID_COPY","[FID]","VB","#")

# delete records that are identical in latitute and longitude
# make sure the point to delete is selected at random by sorting by random
arcpy.Sort_management(out1,out1_a,"RANDOM ASCENDING","#")
fields = ["LATITUDE","LONGITUDE"]
arcpy.DeleteIdentical_management(out1_a,fields,"#","0")

# generate list of points that are within a certain distance (specified by 'dist') or each other
arcpy.GenerateNearTable_analysis(out1_a,out1_a,out2,dist,"NO_LOCATION","NO_ANGLE","ALL","0")
arcpy.AddField_management(out2,"RANDOM2","SHORT","5","#","#","#","NULLABLE","NON_REQUIRED","#")
arcpy.CalculateField_management(out2,"RANDOM2","x","VB",codeblock1)
arcpy.Sort_management(out2,out3,"RANDOM2 ASCENDING","#")
arcpy.DeleteIdentical_management(out3,"NEAR_DIST","#","0")


rows = arcpy.SearchCursor(out3)
i_fid = "NEAR_FID"
a = []

arcpy.MakeFeatureLayer_management(out1_a,"grumble")

row = rows.next()
while row:
&amp;nbsp;&amp;nbsp;&amp;nbsp; i_fid1 = row.getValue(i_fid)
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("FID of row to delete is "+ str(i_fid1))
&amp;nbsp;&amp;nbsp;&amp;nbsp; rows2 = arcpy.UpdateCursor(out1_a)
&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()
&amp;nbsp;&amp;nbsp;&amp;nbsp; while row2:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i_fid2 = row2.getValue("FID")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cute = row2.getValue("L_ID")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #arcpy.AddMessage("FID of row we are on is "+str(i_fid2))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i_fid1 == i_fid2:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = "L_ID = " + str(cute)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a.append(b)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage("deleting row"+ str(i_fid2)+" and original loc is " + str(cute))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row2 = rows2.next()
&amp;nbsp;&amp;nbsp;&amp;nbsp; row = rows.next()
#arcpy.AddMessage("out of loop")

del row
del row2
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
cntr = 0
while cntr&amp;lt;len(a):
&amp;nbsp;&amp;nbsp;&amp;nbsp; f_query = a[cntr]
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.SelectLayerByAttribute_management("grumble","ADD_TO_SELECTION",f_query)
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.AddMessage(f_query)
&amp;nbsp;&amp;nbsp;&amp;nbsp; cntr +=1

arcpy.SelectLayerByAttribute_management("grumble","SWITCH_SELECTION","#")
arcpy.Select_analysis("grumble",out4,"#")



arcpy.GenerateNearTable_analysis(out4,out4,out5,dist,"NO_LOCATION","NO_ANGLE","ALL","0")


# delete out2 and out3


&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Dec 2021 21:19:11 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/problem-with-nested-while-loops/m-p/33690#M2622</guid>
      <dc:creator>AmelieDavis</dc:creator>
      <dc:date>2021-12-10T21:19:11Z</dc:date>
    </item>
  </channel>
</rss>

