6 votos

¿Extrayendo datos usando arcpy.da.SearchCursor?

Tengo un shapefile de características puntuales que muestran la ubicación de los incendios en un año determinado. Uno de los campos se llama "AAAAMMDD" e indica la fecha correspondiente a ese incendio. En Python, estoy intentando utilizar la función arcpy.da.SearchCursor para añadir cada fecha a una lista y encontrar el incendio más reciente por fecha.

Mi código es el siguiente:

listname = []
cursor = arcpy.da.SearchCursor(fires, "YYYYMMDD")

for row in cursor:
    listname.append(row)

print 'the first fire date is ',min(listname),'.'
print 'the last fire date is ',max(listname),'.'

Lo que se imprime para min y max listname es: (20010515.0,) y (20011002.0,) Pero lo que me gustaría obtener como salida es: 20010514 y 20011002

¿Cómo puedo obtener ese resultado?

He intentado indexar lo que tengo para excluir lo que no necesito pero no funciona.

5voto

Paul Puntos 555

Tienes que coger el primer elemento de cada fila y convertirlo a int.

listname = []
cursor = arcpy.da.SearchCursor(fires, "YYYYMMDD")

for row in cursor:
    listname.append(int(row[0]))

print 'the first fire date is {0}.'.format(min(listname))
print 'the last fire date is {0}.'.format(max(listname))

0 votos

También puede utilizar un sql_clause en su cursor de búsqueda algo como sqlClause = (None, ‘ORDER BY ‘ + "YYYYMMDD" + ‘ DESC’) y luego añádelo a tu Cursor de Búsqueda así: cursor = arcpy.da.SearchCursor(fires, "YYYYMMDD", sql_clause = sqlClause) . De esta forma, su campo ya estará ordenado.

1voto

dchanson Puntos 29

Inténtalo así:

En su bucle de cursor - cambiar a:

listname.append(row[0])

y para su impresión - cambiar a:

print "The first fire date is {0}".format(min(listname))
print "The last fire date is {0}".format(max(listname))

0voto

xenny Puntos 670

Debes tener en cuenta que, en tu caso, row es una lista (aunque sólo haya un campo). por tanto, listname se convierte en una lista de listas. tienes que sacar el valor de tu lista.

listname = []
cursor = arcpy.da.SearchCursor(fires, "YYYYMMDD")

for row in cursor:
    listname.append(row[0])

puede darle el formato que desee, por ejemplo :

print "the first date is " + str(min(listname))

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