Eu tenho um cursor de atualização do ArcPy Data Access que gostaria de classificar antes de fazer atualizações.
O cursor faz atualizações se eu não classificar, mas se eu adicionar uma classificação, recebo um erro "iteração não iniciada".
A classificação está funcionando corretamente, mas deve estar bloqueando o cursor por algum motivo.
Não é possível classificar um cursor de atualização como um cursor de pesquisa? Isso muda o tipo ou algo assim?
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
fonte
fonte
Respostas:
A classificação esgota completamente o cursor antes de você entrar
updateRow
. A maneira como os cursores funcionam é que aupdateRow
chamada não funciona em linhas arbitrárias fora da sequência, mas na atual sendo repetida. Ou seja, você só pode operar em uma linha por vez.Você pode querer fazer isso no lado do geodatabase. Você pode especificar uma
ORDER BY
cláusula e classificá-la antes de acessá-la.fonte
sql_clause
parâmetro (tupla):sql_clause=(None, 'ORDER BY SORT_FIELD ASC')
- ouDESC
para decrescente.Como o @nmpeterson apontou, você pode inserir uma cláusula sql na chamada do cursor para classificar por um campo:
As informações vêm da ajuda da ESRI: http://resources.arcgis.com/en/help/main/10.2/index.html#//018w00000014000000
fonte
Pode ser relevante apenas para referência futura, mas de acordo com a ajuda on-line do ArcGis ao usar arcpy.UpdateCursor em vez de arcpy.da.UpdateCursor, há uma opção de classificação disponível.
cursor = arcpy.UpdateCursor (fc, sort_fields = " YOURFIELDNAME ")
fonte