<?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 Multi-row feature/shape table computations in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/multi-row-feature-shape-table-computations/m-p/290209#M22471</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I have seen few examples or methods that worked the way that I needed them to.&amp;nbsp; So, after some playing, I was able to use arcpy cursors in their simplest form in conjunction with Python lists to compute values across multiple rows under a single field.&amp;nbsp; My application was for determining distances between points for grade calculations and assignment of elevation data to those points for design purposes.&amp;nbsp; Every time that I tried to use multiple cursors on the same dataset, it did not work.&amp;nbsp; I am assuming that once a cursor is created, a lock prevents other cursors from accessing the same data (even if they are searchCursors -&amp;gt; readOnly).&amp;nbsp; Below is the code.&amp;nbsp; Enjoy!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;"""&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Use an initial SearchCursor to populate a Python list with the field values.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Loop through the Python list and create a newList of derived values.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Use the newList with an UpdateCursor to populate the field of interest.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;"""&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Creating SearchCursor..."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;searchRows = arcpy.SearchCursor("designFeatures", "", "", "MEAS", "MEAS D")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rowList = []&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Appending searchCursor row fields to new Python list..."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for each in searchRows:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rowList.append(each.MEAS)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Appending operation completed."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Initial Python list: " + str(rowList)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;newList = []&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;j = 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Computing alignment segment lengths for design purposes..."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if i &amp;lt; len(rowList):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Appending calculated values to a new Python list..."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for each in rowList:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if j == len(rowList):&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; newList.append(rowList&lt;I&gt;)&lt;/I&gt;&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; break&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; someCalculation = rowList&lt;I&gt; - rowList&lt;J&gt;&lt;/J&gt;&lt;/I&gt;&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; newList.append(someCalculation)&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; i += 1&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; j += 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "rowList calculations completed and appended to newList."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "New List: " + str(newList)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Creating update cursor..."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;updateRows = arcpy.UpdateCursor("designFeatures", "", "", "MEAS; SEG_LENGTH", "MEAS D")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Updating SEG_LENGTH field..."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;##for each in newList:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp; for every in updateRows:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; every.SEG_LENGTH = each&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for each in updateRows:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i &amp;lt; len(newList):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; each.SEG_LENGTH = newList&lt;I&gt;&lt;/I&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; updateRows.updateRow(each)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i += 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "SEG_LENGTH field rows have been updated."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Creating SearchCursor for field value verification..."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;verifyRows = arcpy.SearchCursor("designFeatures", "", "", "MEAS; SEG_LENGTH", "MEAS D")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;for each in verifyRows:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print each.SEG_LENGTH&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;del searchRows, updateRows, verifyRows&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 22 Feb 2012 18:03:30 GMT</pubDate>
    <dc:creator>DeanRobbins</dc:creator>
    <dc:date>2012-02-22T18:03:30Z</dc:date>
    <item>
      <title>Multi-row feature/shape table computations</title>
      <link>https://community.esri.com/t5/python-questions/multi-row-feature-shape-table-computations/m-p/290209#M22471</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I have seen few examples or methods that worked the way that I needed them to.&amp;nbsp; So, after some playing, I was able to use arcpy cursors in their simplest form in conjunction with Python lists to compute values across multiple rows under a single field.&amp;nbsp; My application was for determining distances between points for grade calculations and assignment of elevation data to those points for design purposes.&amp;nbsp; Every time that I tried to use multiple cursors on the same dataset, it did not work.&amp;nbsp; I am assuming that once a cursor is created, a lock prevents other cursors from accessing the same data (even if they are searchCursors -&amp;gt; readOnly).&amp;nbsp; Below is the code.&amp;nbsp; Enjoy!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;"""&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Use an initial SearchCursor to populate a Python list with the field values.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Loop through the Python list and create a newList of derived values.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Use the newList with an UpdateCursor to populate the field of interest.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;"""&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Creating SearchCursor..."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;searchRows = arcpy.SearchCursor("designFeatures", "", "", "MEAS", "MEAS D")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rowList = []&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Appending searchCursor row fields to new Python list..."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for each in searchRows:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rowList.append(each.MEAS)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Appending operation completed."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Initial Python list: " + str(rowList)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;newList = []&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;j = 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Computing alignment segment lengths for design purposes..."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if i &amp;lt; len(rowList):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Appending calculated values to a new Python list..."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for each in rowList:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if j == len(rowList):&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; newList.append(rowList&lt;I&gt;)&lt;/I&gt;&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; break&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; someCalculation = rowList&lt;I&gt; - rowList&lt;J&gt;&lt;/J&gt;&lt;/I&gt;&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; newList.append(someCalculation)&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; i += 1&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; j += 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "rowList calculations completed and appended to newList."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "New List: " + str(newList)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Creating update cursor..."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;updateRows = arcpy.UpdateCursor("designFeatures", "", "", "MEAS; SEG_LENGTH", "MEAS D")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Updating SEG_LENGTH field..."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;##for each in newList:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp; for every in updateRows:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; every.SEG_LENGTH = each&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for each in updateRows:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i &amp;lt; len(newList):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; each.SEG_LENGTH = newList&lt;I&gt;&lt;/I&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; updateRows.updateRow(each)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i += 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "SEG_LENGTH field rows have been updated."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;print "Creating SearchCursor for field value verification..."&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;verifyRows = arcpy.SearchCursor("designFeatures", "", "", "MEAS; SEG_LENGTH", "MEAS D")&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;for each in verifyRows:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print each.SEG_LENGTH&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;del searchRows, updateRows, verifyRows&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 22 Feb 2012 18:03:30 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/multi-row-feature-shape-table-computations/m-p/290209#M22471</guid>
      <dc:creator>DeanRobbins</dc:creator>
      <dc:date>2012-02-22T18:03:30Z</dc:date>
    </item>
  </channel>
</rss>

