Tengo un cursor de actualización de ArcPy Data Access que me gustaría ordenar antes de realizar actualizaciones.
El cursor realiza actualizaciones si no ordeno, pero si agrego una ordenación al cursor aparece un error, "no se inició la iteración".
La ordenación funciona correctamente, pero debe estar reventando el cursor por algún motivo.
¿No es posible ordenar un cursor de actualización como un cursor de búsqueda? ¿Cambia el tipo o algo?
idList = ['100100', '100200', '100300', '200100']
count = 0
with arcpy.da.UpdateCursor(newFC, ("SHAPE@X", "SHAPE@Y", "Label")) as addLabelCursor:
for row in sorted(addLabelCursor, key=itemgetter(0), reverse = True):
print idList[count]
row[2] = str(idList[count])
addLabelCursor.updateRow(row)
count += 1
arcpy
arcgis-10.1
cursor
sorting
TurboGus
fuente
fuente
Respuestas:
La ordenación agota completamente el cursor antes de entrar
updateRow
. La forma en que funcionan los cursores es que laupdateRow
llamada no funciona en filas arbitrarias fuera de secuencia, sino en la actual que se repite. Es decir, solo puede operar en una fila a la vez.Es posible que desee considerar hacer esto en el lado de la geodatabase en su lugar. Puede especificar una
ORDER BY
cláusula y ordenarla antes de llegar a ella.fuente
sql_clause
parámetro (tupla):sql_clause=(None, 'ORDER BY SORT_FIELD ASC')
- oDESC
para descender.Como señaló @nmpeterson, puede ingresar una cláusula sql en la llamada del cursor para ordenar por un campo:
la información proviene de la ayuda de ESRI: http://resources.arcgis.com/en/help/main/10.2/index.html#//018w00000014000000
fuente
Puede que solo sea relevante para referencia futura, pero según la ayuda en línea de ArcGis cuando se usa arcpy.UpdateCursor en lugar de arcpy.da.UpdateCursor, hay una opción de clasificación disponible.
cursor = arcpy.UpdateCursor (fc, sort_fields = " YOURFIELDNAME ")
fuente