2 votos

Uso de cursores de búsqueda y actualización para la generación de números aleatorios en ArcPy?

Tengo problemas para conseguir que un cursor de búsqueda devuelva un valor para cada registro. El propósito de mi código es escanear una lista de registros en un campo (CampoA) y en base a esos valores rellenar un segundo campo (CampoB) con un número aleatorio entre 1 y el valor del CampoA. El campoA contiene valores numéricos que varían en función de su asociación. Mi código es el siguiente:

CursorA = arcpy.SearchCursor(FC)
for row in cursorA:
    rowcount =(row.getValue("FieldA"))
    row = cursorA.next()
    cursorB = arcpy.UpdateCursor(FC, "FieldB") 
    for rowB in cursorB:
        rowB[0] = randint(1, rowcount)
        cursorB.updateRow(rowB)

Cuando ejecuto el código parece que el searchcursor localiza el valor del último registro en FieldA y utiliza ese valor como el más alto de la secuencia aleatoria. Sin embargo, podría estar equivocado en esto, y podría estar relacionado con una codificación incorrecta de mi parte.

3voto

Aaron Puntos 25882

Este script muestra el enfoque que yo tomaría. El operador principal aquí es el propio UpdateCursor. Puedes ver que incluí ambos campos dentro de un UpdateCursor. En el UpdateCursor, esto se traduce en:

row[0] = 'FieldA'
row[1] = 'FieldB'

Entonces, simplemente usa estas filas para hacer el trabajo pesado por ti:

rnumber = randint(1, row[0])

import arcpy, random
from random import *

fc = r'C:\path\to\fc'

with arcpy.da.UpdateCursor(fc, ['FieldA','FieldB']) as cursor:
    for row in cursor:
        rnumber = randint(1, row[0])
        print rnumber
        row[1] = rnumber
        cursor.updateRow(row)

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