2016-04-21 1 views
0

J'ai utilisé des curseurs pour créer une nouvelle table attributaire avec python et arcpy. Cependant, lorsque j'essaie d'imprimer les lignes à partir des données d'attributs telles que le pays, la ville, une seule ville sera imprimée.Ligne d'impression en Python

arcpy.CopyRows_management (folder_path + '\NA_Cities.shp', folder_path + '\Select_Cities.dbf') 
fc = folder_path + '\Select_Cities.dbf' 

The_cursor = arcpy.da.UpdateCursor(fc, ['CNTRY_NAME', 'Population']) 
for row in The_cursor: 
    if row[0] == 'United States' and row[1] < 8000000: 
     The_cursor.deleteRow() 
    elif row [0] == 'Mexico' and row[1] < 8000000: 
     The_cursor.deleteRow() 
    elif row[0] == 'Canda' and row[1] < 3000000: 
     The_cursor.deleteRow() 
print row 

Voici mon résultat

Selecting locations 

Please Stand By... 

Removing the data that does not meet the requirements 

[u'Canada', 25000.0] 

Finished identifying the cities 

Merci à l'avance pour tout conseil!

+0

vous êtes dans une boucle for. dès que l'une des conditions réussit, la boucle passera à l'élément suivant dans la liste, dans ce cas le résultat de votre requête. quoi qu'il retourne. –

+0

Canda ... dans votre dernier elif ... nous préférons le Canada –

+0

Les questions qui demandent une aide au débogage doivent inclure le comportement souhaité, un problème ou une erreur spécifique et le ** code le plus court nécessaire pour le reproduire **. Vous ne montrez pas où votre instruction 'print' est et donc nous ne pouvons pas vous dire comment le réparer. Voir: [Comment créer un exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve). – Erica

Répondre

0

Pour imprimer chaque ligne dans la boucle, l'instruction print row doit être dans la boucle.

for row in The_cursor: 
    print row 
    if row[0] == 'United States' and row[1] < 8000000: 
     The_cursor.deleteRow() 
    elif row [0] == 'Mexico' and row[1] < 8000000: 
     The_cursor.deleteRow() 
    elif row[0] == 'Canada' and row[1] < 3000000: 
     The_cursor.deleteRow() 

Si vous souhaitez que les lignes supprimées à imprimer, mettre cette déclaration print dans les if/elif conditionals.

+0

Merci beaucoup !! J'essayais d'imprimer partout sauf au-dessus de l'instruction for –