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: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 = row #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: 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