Suite

Utiliser des curseurs de recherche et de mise à jour pour la génération de nombres aléatoires dans ArcPy ?

Utiliser des curseurs de recherche et de mise à jour pour la génération de nombres aléatoires dans ArcPy ?


J'ai du mal à obtenir un curseur de recherche pour renvoyer une valeur pour chaque enregistrement. Le but de mon code est de parcourir une liste d'enregistrements dans un champ (FieldA) et, sur la base de ces valeurs, de remplir un deuxième champ (FieldB) avec un nombre aléatoire compris entre 1 et la valeur de FieldA. FieldA contient des valeurs numériques qui varient en fonction de leur association. Mon code est le suivant :

CursorA = arcpy.SearchCursor(FC) pour la ligne dans le curseurA : rowcount =(row.getValue("FieldA")) ligne = curseurA.next() curseurB = arcpy.UpdateCursor(FC, "FieldB") pour la ligneB dans le curseurB : ligneB [0] = randint(1, rowcount) cursorB.updateRow(rowB)

Lorsque j'exécute le code, il semble que le curseur de recherche localise la valeur du dernier enregistrement dans FieldA et utilise cette valeur comme valeur la plus élevée dans la séquence aléatoire. Je peux me tromper à ce sujet cependant, et cela pourrait être lié à un codage incorrect de ma part.


Ce script ci-joint montre l'approche que j'adopterais. L'opérateur principal ici est le UpdateCursor lui-même. Vous pouvez voir que j'ai inclus les deux champs dans un seul UpdateCursor. Dans le UpdateCursor, cela se traduit par :

rangée[0] = 'ChampA' rangée[1] = 'ChampB'

Ensuite, utilisez simplement ces rangées pour faire le gros du travail à votre place :

rnombre = randint(1, ligne[0])

import arcpy, random from random import * fc = r'C:path	ofc' avec arcpy.da.UpdateCursor(fc, ['FieldA','FieldB']) comme curseur : pour la ligne dans le curseur : rnumber = randint(1, row[0]) print rnumber row[1] = rnumber cursor.updateRow(row)