2016-03-22 2 views
1

J'essaie de remplacer les valeurs dans les 4 premières lignes d'une table attributaire par les valeurs de ligne des 4 lignes suivantes 5: 8 dans une table attributaire utilisant arcpy. da.UpdateCursor. Existe-t-il un moyen simple d'indexer les lignes 1: 4 (toutes les colonnes) et de les remplacer par des valeurs des lignes 5: 8.Remplacer les 4 premières lignes par les valeurs des lignes 5: 8 arcpy

Voici mon code jusqu'ici:

targetFC = r"D:\ZOC\POLYPGDIS_MASTER_1.shp" 

dsc = arcpy.Describe(sourceFC) 
fields = dsc.fields 

# List all field names except the OID field 

fieldnames = [field.name for field in fields if field.name != dsc.OIDFieldName] 

with arcpy.da.UpdateCursor(targetFC, fieldnames) as cursor: 
for row in cursor: 
    row[1:4] = row[5:8] 
    cursor.updateRow(row) 

Merci

+0

Pourriez-vous donner un exemple de ce que vous essayez d'accomplir? – Borealis

Répondre

1

Je pense que la façon la plus facile serait de charger les données dans une liste. Notez que si vous travaillez avec un SGBDR, l'ordre des lignes n'est pas certain, cela ne fonctionnera probablement pas, sauf si vous avez trié quelque chose.

eight_rows = [] 
k = 0 
with arcpy.da.SearchCursor(targetFC, fieldnames) as rows: 
    for row in rows: 
     eight_rows.append(row) 
     k += 1 
     if k == 8: break 
k = 5 
with arcpy.da.UpdateCursor(targetFC, fieldnames) as rows: 
    for row in rows: 
     row = eight_rows[k] 
     k += 1 
     rows.updateRow(row) 
     if k == 8: break