2016-05-22 2 views
2

Nous essayons de changer les valeurs dans une colonne à partir d'un shapefile pour créer un nouveau champ/colonne avec les nouvelles valeurs. Nous avons essayé d'utiliser un curseur de recherche et de mise à jour pour accomplir cela ainsi qu'un calculateur de boucle for et de champ. Est-ce que quelqu'un a une idée de la façon d'y parvenir de manière simpliste?Essayer de changer les valeurs dans un champ avec un curseur

Voici un échantillon de notre script dans lequel nous essayons de convertir tous les articles étiquetés « Montane_Chaparal » dans la colonne à une nouvelle valeur « Dry_Forest » dans la nouvelle colonne

veg = "Cal_Veg.shp" 
field = ["WHRNAME"] 

therows=arcpy.UpdateCursor(veg, field) 

for therow in therows: 
    if (therow.getValue(field)==" "): 
     therow.setValue("Montane_Chaparral","Dry_Forest") 
    therows.updateRow(therow) 

print "Done." 

J'ai aussi essayé:

veg = "Cal_Veg.shp" 
with arcpy.da.SearchCursor(veg,["WHRNAME","NewVeg"]) as SCursor: 
    for row in SCursor: 
     if row[0] == "Montane Chaparral": 
      with arcpy.da.InsertCursor(veg,["NewVeg"]) as ICursor: 
       for new_row in ICursor: 
        NewVeg = "Dry Forest" 
        ICursor.insertRow(new_row) 
print "done" 

Répondre

0

Je recommanderais sans hésiter le daUpdate Cursor plus moderne pour votre scri pt, pour diverses raisons, mais principalement pour la rapidité et l'efficacité.

Il semble que vous exécutiez incorrectement un curseur imbriqué où tout ce dont vous avez besoin est un seul curseur de mise à jour. Essaye ça.

veg = "Cal_Veg.shp" 

with arcpy.da.UpdateCursor(veg,["WHRNAME","NewVeg"]) as cursor: 
    for row in cursor: 
     if row[0] == "Montane Chaparral": # row[0] references "WHRNAME" 
      row[1] = "Dry Forest"   # row[1] references "NewVeg" 
     cursor.updateRow(row) 

print "done"