banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GEODATA DAYS 2024

#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

 

Pied de page des forums

Powered by FluxBB