7 votos

Contando en bucle utilizando ArcPy Cursor?

Cuando se utiliza el UpdateCursor, existe un "built-in" que la manera de contar dentro del bucle?

En este momento estoy usando una variable i y agregar 1 después de cada iteración:

cur = arcpy.da.UpdateCursor("points.shp","ID1")
i = 0
for row in cur:
    row[0] = i
    cur.updateRow(row)
    i = i +1

Hay una forma más inteligente, algo como row.count()?

9voto

GreyCat Puntos 146

En teoría (porque no sé arcpy), basta con utilizar la función estándar de enumerar (GeoNet: la Enumeración de un cursor)

for i, row in enumerate(cur):
     row[0] = i
     cur.updateRow(row)

8voto

Aaron Puntos 25882

La opción más fácil sería hacer referencia a el OID en los atributos usando el OID@ token en una SearchCursor.

import arcpy

shp = r'X:\path\to\your\shapefile.shp'

with arcpy.da.SearchCursor(shp, ["OID@", "some_field"]) as cursor:
    for row in cursor:
        print row

Como alternativa, la construcción de genes en la respuesta, Python, construido-en enumerate función puede hacer una limpia del flujo de trabajo de este.

import arcpy

shp = r'X:\path\to\your\shapefile.shp'

with arcpy.da.SearchCursor(shp, "some_field") as cursor:
    for i, row in enumerate(cursor, start = 1):
        print i, row

Tenga en cuenta que "enumerar" crea una tupla de un conde y la iterable valor. Para resaltar la fuctionality (documentación):

>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X