#1 Mon 17 March 2014 16:01
- Gobtron
- Juste Inscrit !
- Date d'inscription: 17 Mar 2014
- Messages: 2
ArcGIS 10.1 python: for dans un for!
J'ai besoin de votre aide... ça fait déjà trop de temps que je passe à essayer de trouver ce qui ne marche pas dans mon code. Il faut dire que j'apprend le language de programmation au fur et à mesure que j'avance dans mon script. L'erreur peut être si banale!
Donc le premier "for" passe chaque rangée de la table d'attribut no.1 et prend le contenu du champ "NEAR_FID".
Le deuxième "for" passe chaque rangée de la table d'attribut no.2 jusqu'à ce que NEAR_FID soit = FID.
On retourne ensuite au premier "for" pour faire la même chose avec le deuxième item de la table d'attribut no.1
Pour une raison que j'ignore, tout ça fonctionne seulement pour la première donnée de la table d'attribut no.1. Après avoir passé une fois et trouvé avec succès la correspondance entre les 2 tables d'attributs, le code ne passe plus dans la deuxième boucle, termine la boucle 1 et fini son exxécution... !
Code:
import arcpy in_feature = "3ans" near_feature = "PhysicoChimie3ans" cursor1 = arcpy.SearchCursor(in_feature, fields="NEAR_FID") cursor2 = arcpy.SearchCursor(near_feature, fields="pH") for row1 in cursor1: data_to_get = row1.getValue("NEAR_FID") print data_to_get for row2 in cursor2: if row2.getValue("FID") == data_to_get: print row2.getValue("ph"), "loop2" cursor2.reset()
Hors ligne
#2 Mon 17 March 2014 17:23
- dominique.lys
- Participant assidu
- Date d'inscription: 5 Oct 2006
- Messages: 473
- Site web
Re: ArcGIS 10.1 python: for dans un for!
Vu que le script arrive au terme de son exécution, j'aurai tendance à penser que la fonction reset() n'a pas l'effet rechercher, dans la cas contraire la seconde boucle serait infinie...
Essaye en créant un nouveau curseur à chaque itération de la 1ere boucle et utilise l'instruction break pour sortir de la seconde boucle une fois la valeur correspondante trouvée.
Code:
import arcpy in_feature = "3ans" near_feature = "PhysicoChimie3ans" cursor1 = arcpy.SearchCursor(in_feature, fields="NEAR_FID") for row1 in cursor1: data_to_get = row1.getValue("NEAR_FID") print data_to_get cursor2 = arcpy.SearchCursor(near_feature, fields="pH") for row2 in cursor2: if row2.getValue("FID") == data_to_get: print row2.getValue("ph"), "loop2" break
Hors ligne
#3 Mon 17 March 2014 17:53
- Gobtron
- Juste Inscrit !
- Date d'inscription: 17 Mar 2014
- Messages: 2
Re: ArcGIS 10.1 python: for dans un for!
Mon problème a été résolé avec ce code:
Code:
import arcpy in_feature = "3ans" near_feature = "PhysicoChimie3ans" cursor1 = arcpy.SearchCursor(in_feature, fields="NEAR_FID") for row1 in cursor1: data_to_get = row1.getValue("NEAR_FID") print data_to_get cursor2 = arcpy.SearchCursor(near_feature, fields="pH") for row2 in arcpy.SearchCursor(near_feature, fields="pH"): if row2.getValue("FID") == data_to_get: print row2.getValue("ph"), "loop2" del row2
Hors ligne