1

I have a feature class with a number of fields, two of wich are key fields, named key and front, and secondary fields named key_n and front_n.

The thing is I need to search in the whole table for any instances of key values where the front equals the front_n value (key+front = key+front_n), as the basis for calculating the key_n value.

I have tried with arcpy.da.UpdateCursor, but haven't got it, since, to my view, the arcpy.da.UpdateCursor compares only values within the current row, and the provided examples with ArcGis don't explore this possibility.

This is the code I've gotten lately, to no success. In this case, the fields cvegeo and cveft are to be searched as a match to cvegeo + cveref1, in which case, the cvevial1 and cveseg1 fields are to be carried from the record where cvegeo+cveft are taken originaly.

import arcpy
import sys

frentes = arcpy.GetParameterAsText(0)
#frentes = arcpy.GetParameterAsText(1)
campos = ('CVEGEO', 'CVEFT', 'CVEVIAL', 'CVESEG', 'CVEGEO_N', 'CVEFT_N', 'CVEVIAL_N', 'CVESEG_N', 'CVEREF1', 'CVEVIAL1', 'CVESEG1', 'CVEREF2', 'CVEVIAL2', 'CVESEG2', 'CVEREF1_N', 'CVEVIAL1_N', 'CVESEG1_N', 'CVEREF2_N', 'CVEVIAL2_N', 'CVESEG2_N', 'PRUEBA')

with arcpy.da.SearchCursor(frentes, campos) as scursor:
    for row in scursor:
        abuscar = row[0]
        frente = row[1]
        clave_vial = row[2]
        clave_seg = [3]
        with arcpy.da.UpdateCursor(frentes, campos) as ucursor:
           for urow in ucursor:
               if (urow[0] == abuscar and urow[8] == frente):
                   urow[9] = clave_vial
                   urow[10] = clave_seg
                   ucursor.updateRow(urow)
2
  • That looks like it should work, if I've understood your question correctly. Exactly what isn't working? Are you getting an error, or just no updates? Sep 4, 2015 at 17:51
  • I get this error: Traceback (most recent call last): File "D:\python\frentes.py", line 19, in <module> ucursor.updateRow(urow) TypeError: value #10 - unsupported type: list Sep 4, 2015 at 17:53

1 Answer 1

3

You have a syntax error in your outer loop. Instead of assigning the value of the 4th field to clave_seg, you have given it the value of [3], which is a list and ArcGIS doesn't know what to do with it.

Change clave_seg = [3] to clave_seg = row[3]:

2
  • Jesus, it was so obvious! Apparently the code is now working, thank you very much! Greetings from México! :) Sep 4, 2015 at 18:03
  • @RicardoEspejelCruz if it answers your question then you can click the Accept button (green tick) to reward the answerer.
    – PolyGeo
    Sep 4, 2015 at 20:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.