Ich habe einen ArcPy Data Access-Aktualisierungscursor, den ich sortieren möchte, bevor ich Aktualisierungen daran vornehme.
Der Cursor wird aktualisiert, wenn ich nicht sortiere. Wenn ich dem Cursor jedoch eine Sortierung hinzufüge, wird die Fehlermeldung "Iteration nicht gestartet" angezeigt.
Die Sortierung funktioniert korrekt, muss aber aus irgendeinem Grund den Cursor sprengen.
Ist es nicht möglich, einen Aktualisierungscursor wie einen Suchcursor zu sortieren? Ändert es den Typ oder so?
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
quelle
quelle
Antworten:
Die Sortierung erschöpft den Cursor vollständig, bevor Sie darauf zugreifen
updateRow
. Die Art und Weise, wie Cursor funktionieren, besteht darin, dass derupdateRow
Aufruf nicht für beliebige Zeilen außerhalb der Sequenz funktioniert, sondern für die aktuelle, über die iteriert wird. Das heißt, Sie können jeweils nur eine Zeile bearbeiten.Möglicherweise möchten Sie dies stattdessen auf der Geodatabase-Seite untersuchen. Sie können eine
ORDER BY
Klausel angeben und sortieren, bevor Sie stattdessen darauf zugreifen.quelle
sql_clause
Parameter (Tupel) angeben können :sql_clause=(None, 'ORDER BY SORT_FIELD ASC')
- oderDESC
für absteigend.Wie @nmpeterson betonte, können Sie eine SQL-Klausel in den Cursoraufruf eingeben, um nach einem Feld zu sortieren:
Informationen stammen aus der ESRI-Hilfe: http://resources.arcgis.com/de/help/main/10.2/index.html#//018w00000014000000
quelle
Dies ist möglicherweise nur für zukünftige Referenzzwecke relevant. Laut ArcGis-Onlinehilfe steht jedoch bei Verwendung von arcpy.UpdateCursor anstelle von arcpy.da.UpdateCursor eine Sortieroption zur Verfügung.
cursor = arcpy.UpdateCursor (fc, sort_fields = " YOURFIELDNAME ")
quelle