Quantcast
Channel: Forums - Python
Viewing all articles
Browse latest Browse all 2485

arcpy.da.UpdateCursor use variable as field index?

$
0
0
I'm working with an arcpy data access update cursor with a lot of fields that have an old/new pattern (e.g. oldField1, newField1, oldField2, newField2, etc. I have a very simple operation I'd like to do -- calculate the newField = oldField for each pair. I know I could use CalculateField_management, which is actually what I had been doing previously. But there are conflicting reports as to which is faster -- da.UpdateCursor or CalculateField. I am trying to optimize speed, so I want to try this out.

The root of my question: is there a way to use a variable instead of the list index in a da cursor. Specifically:

Code:

import arcpy
FC = "C:\\data\\test.gdb\\test"

fields = ["newField1", "oldField1", "newField2", "oldField2", "newField3", "oldField3", .... "newFieldn", "oldFieldn"]
#There are actually a lot more fields in this same new/old pattern

with arcpy.da.UpdateCursor(FC, fields) as rows:
    i = 0
    for row in rows:
        j = i + 1
        row[i] = row[j]  #simply setting the new value = old value for each old/new pair, but get "list index out of range" error
        i = i + 1

I know I could take the actual index for each (eg row[0] = row[1], then row[2] = row[3] the next time, etc) but that would be messy with so many fields.

With the old cursors, I could have done something like the following, but the old cursors are definitely slower than CalculateField_management, so this is not worth pursuing:

Code:

baseFieldNameList = ["Field1", "Field2", "Field3", ...  "Fieldn")
rows = arcpy.UpdateCursor
for field in baseFieldNameList:
    newField = "new" + field
    oldField = "old" + field
    oldValue = row.getValue(oldField)
    row.setValue(newField, oldValue)
    rows.updateRow
del rows, row

Any suggestions, workarounds, or input would be much appreciated.

Thanks,
-Erik

Viewing all articles
Browse latest Browse all 2485

Trending Articles