Suite

L'itération du curseur arcpy.da n'a pas démarré ?


J'essaie de convertir les curseurs écrits en 10.0 pour utiliser le nouveau module arcpy.da en 10.2.1. Si je parcoure le code en mode débogage, il entre dans la boucle for ; Cependant, lorsque j'essaie d'exécuter le code, j'obtiens une exception : itération non démarrée

code pour 10.0

pour la ligne dans updateCursor : si row.getValue("STREET_NUMBER_PREFIX") dans ['N', 'S', 'W'] : row.setValue("STREET_DIR_PREFIX", row.getValue("STREET_NUMBER_PREFIX")) row.setValue( "STREET_NUMBER_PREFIX", aucun)

code pour 10.2.1

avec arcpy.da.UpdateCursor(civicAddress, flds) comme lignes : pour ligne dans lignes : si ligne[0] dans ['N', 'S', 'W'] : ligne[1] = ligne[0] ligne[ 0] = Aucun

Que puis-je faire pour résoudre mon problème ?

J'ai pas mal de blocs de code comme ci-dessus qui traitent de cas logiques spécifiques.

Voici le code complet de cette section, peut-être que cela vous aidera:

flds = ("STREET_NUMBER_PREFIX", "STREET_DIR_PREFIX", "STREET_NUMBER_SUFFIX", "CIVIC_ID") flds2 = ("CIVIC_ID", "UNIT_NUMBER") log.information ("Création de curseurs… ") insertCursor = arcpy.da.InsertCursor(InsertCursor flds2) #row = [] avec arcpy.da.UpdateCursor(civicAddress, flds) comme lignes : pour ligne dans lignes : si ligne[0] dans ['N', 'S', 'W'] : ligne[1] = rangée[0] rangée[0] = Aucun si rangée[2] dans ['N', 'S', 'W'] : rangée[1] = rangée[2] rangée[2] = Aucun si rangée[2 ] dans unitLst : newrow = insertCursor.newRow() newrow[0] = row[3] newrow[1] = row[2] row[2] = Aucun insertCursor.insertRow(newrow) si ligne[0] dans unitLst : newrow = insertCursor.newRow() newrow[0] = row[3] newrow[1] = row[0] row[0] = Aucun insertCursor.insertRow(newrow) try: if re.match("[0-9][ AZ]", ligne[0]) ou re.match("[0-9][0-9][AZ]", ligne[0]) ou  re.match("[AZ][0-9] ", row[0]) ou re.match("[AZ][0-9][0-9]", row[0]) : newrow = insertCursor.newRow() newrow[0] = row[3] newrow[1] = row[0] row.setValue("STREET_NUMBER_PREFIX", None) row[0] = None insertCursor.insertRow(ne wrow) sauf : pass try : if re.match("[0-9][AZ]", row[2]) ou re.match("[0-9][0-9][AZ]", row [2]) ou  re.match("[AZ][0-9]", row[2]) ou re.match("[AZ][0-9][0-9]", row[2 ]): newrow = insertCursor.newRow() newrow[0] = row[3] newrow[1] = row[2] row[2] = Aucun insertCursor.insertRow(newrow) sauf : pass try : if row[0] .isdigit() : newrow = insertCursor.newRow() newrow[0] = row[3] newrow[1] = row[0] row.setValue("STREET_NUMBER_PREFIX", None) row[0] = None insertCursor.insertRow( newrow) sauf : passer essayer : #if row.getValue("STREET_NUMBER_SUFFIX").isdigit() : if row[2].isdigit() : newrow = insertCursor.newRow() #newrow.setValue("CIVIC_ID", row. getValue("CIVIC_ID")) newrow[0] = row[3] # newrow.setValue("UNIT_NUMBER", row.getValue("STREET_NUMBER_SUFFIX")) newrow[1] = row[2] #row.setValue("STREET_NUMBER_SUFFIX) ", None) row[2] = None insertCursor.insertRow(newrow) sauf : pass rows.updateRow(row) del row del newrow del rows

Si vous voulez faire des mises à jour avec votre UpdateCursor, vous devrez déplacerlignes.updateRow(ligne)dans votre boucle for :

avec arcpy.da.UpdateCursor(civicAddress, flds) comme lignes : pour la ligne dans les lignes :… snip… rows.updateRow(row) #doit être indenté à l'intérieur de la boucle del row del newrow del rows

Je parie que le problème vient du mélangeMettre à jour les curseursavecInsérerCurseurs. Au lieu d'avoir les deux traitements simultanément, je suggère de séparer les deux.

Créez une liste vide avant l'un ou l'autre.

li = []

Retirez votreInsérerCurseurdès le début du script, et toutnewrow = insertCursor.newRow()doit également être supprimé. Ensuite, remplacez tous vosinsertCursor.insertRow(newrow)avecli.append ((ligne[x], ligne[y])), où x et y sont les indices appropriés.

Enfin, une fois votreMettre à jour le curseurest terminé, effectuez votreInsérerCurseuravec des lignes de votre liste.

insertCursor = arcpy.da.InsertCursor(subAddress, flds2) pour rw dans li : insertCursor.insertRow(rw)