Pages: 1
- Sujet précédent - Comparer valeurs entre 2 tables de même structure (PYTHON) ArcGIS 10.2 - Sujet suivant
#1 Thu 27 October 2016 14:17
- JPr31
- Participant occasionnel
- Date d'inscription: 7 Jun 2012
- Messages: 15
Comparer valeurs entre 2 tables de même structure (PYTHON) ArcGIS 10.2
Bonjour,
Je souhaite créer un script qui me permettrait de comparer les valeurs de 2 tables ayant la même structure.
Plus précisément, je dois envoyer une table à un BE qui va faire des relevés et donc modifier des valeurs dans cette table.
Le but est de pouvoir extraire les lignes où une valeur a été modifiée.
Après plusieurs recherches, je me suis concentré sur une comparaison des valeurs pour chaque colonne via un SearchCursor.
Je crée un nouveau champ dans lequel j'inscrit 1 si une valeur a changé dans la ligne ou 0 si rien n'a changé.
Mon soucis est que le résultat ne fonctionne pas vraiment mais je n'ai pas de message d'erreurs.
Je poste mon code pour une éventuelle aide ou guide pour autres solutions.
Merci d'avance
Code:
import arcpy from arcpy import env env.overwriteOutput = True # Set workspace environment env.workspace = r"mon chemin d'environnement" # Set input feature class in_dataset = arcpy.GetParameterAsText(0) path_newexport = arcpy.GetParameterAsText(1) checkField = ["Id_node", "ID_COLL", "INSEE", "COMMUNE", "RESEAU", "TYPE", "CATEGORIE", "NUMERO", "DATE_POSE", "ENTREPRISE", "FABRICANT", "MODELE", "IMPLANT", "HorS_SERV", "DATE_HS", "PROJET", "ALTITUDE", "PROFONDEUR", "RADIER", "X", "Y", "X_mesure", "Y_mesure", "PROPRIO", "CLASSE_P", "ANGLE", "DIAMETRE", "MATERIAU", "ACCESSIBLE", "FERMETURE", "DEBITMETRE", "COTE_REFOU", "Z_PUISARD"] expression = "getCheck(!Id_node!, !ID_COLL!, !INSEE!, !COMMUNE!, !RESEAU!, !TYPE!, !CATEGORIE!, !NUMERO!, !DATE_POSE!, !ENTREPRISE!, !FABRICANT!, !MODELE!, !IMPLANT!, !HORS_SERV!, !DATE_HS!, !PROJET!, !ALTITUDE!, !PROFONDEUR!, !RADIER!, !X!, !Y!, !X_mesure!, !Y_mesure!, !PROPRIO!, !CLASSE_P!, !ANGLE!, !DIAMETRE!, !MATERIAU!, !ACCESSIBLE!, !FERMETURE!, !DEBITMETRE!, !COTE_REFOU!, !Z_PUISARD!)" codeblock =""" def getCheck(Id_node, ID_COLL, INSEE, COMMUNE, RESEAU, TYPE, CATEGORIE, NUMERO, DATE_POSE, ENTREPRISE, FABRICANT, MODELE, IMPLANT, HORS_SERV, DATE_HS, PROJET, ALTITUDE, PROFONDEUR, RADIER, X, Y, X_mesure, Y_mesure, PROPRIO, CLASSE_P, ANGLE, DIAMETRE, MATERIAU, ACCESSIBLE, FERMETURE, DEBITMETRE, COTE_REFOU, Z_PUISARD): in_dataset = arcpy.GetParameterAsText(0) path_newexport = arcpy.GetParameterAsText(1) checkField = ["Id_node", "ID_COLL", "INSEE", "COMMUNE", "RESEAU", "TYPE", "CATEGORIE", "NUMERO", "DATE_POSE", "ENTREPRISE", "FABRICANT", "MODELE", "IMPLANT", "HorS_SERV", "DATE_HS", "PROJET", "ALTITUDE", "PROFONDEUR", "RADIER", "X", "Y", "X_mesure", "Y_mesure", "PROPRIO", "CLASSE_P", "ANGLE", "DIAMETRE", "MATERIAU", "ACCESSIBLE", "FERMETURE", "DEBITMETRE", "COTE_REFOU", "Z_PUISARD"] cursor1 = arcpy.da.SearchCursor(in_dataset, checkField) cursor2 = arcpy.da.SearchCursor(path_newexport, checkField) for row1 in cursor1: for row2 in cursor2: if row1[0] == row2[0]: if row1[1] != row2[1] or row1[2] != row2[2] or row1[3] != row2[3] or row1[4] != row2[4] or row1[5] != row2[5] or row1[6] != row2[6] or row1[7] != row2[7] or row1[8] != row2[8] or row1[9] != row2[9] or row1[10] != row2[10] or row1[11] != row2[11] or row1[12] != row2[12] or row1[13] != row2[13] or row1[14] != row2[14] or row1[15] != row2[15] or row1[16] != row2[16] or row1[17] != row2[17] or row1[18] != row2[18] or row1[19] != row2[19] or row1[20] != row2[20] or row1[21] != row2[21] or row1[22] != row2[22] or row1[23] != row2[23] or row1[24] != row2[24] or row1[25] != row2[25] or row1[26] != row2[26] or row1[27] != row2[27] or row1[28] != row2[28] or row1[29] != row2[29] or row1[30] != row2[30] or row1[31] != row2[31] or row1[32] != row2[32]: Match = '1' else: Match = '0' else: Match = '' return '{0}'.format(Match) """ arcpy.AddField_management(path_newexport, "Match", "SHORT") arcpy.CalculateField_management(path_newexport,"Match",expression,"PYTHON_9.3",codeblock)
Hors ligne
#2 Thu 03 November 2016 08:10
- JPr31
- Participant occasionnel
- Date d'inscription: 7 Jun 2012
- Messages: 15
Re: Comparer valeurs entre 2 tables de même structure (PYTHON) ArcGIS 10.2
Personne n'a une piste?
Hors ligne
#3 Thu 03 November 2016 08:45
Re: Comparer valeurs entre 2 tables de même structure (PYTHON) ArcGIS 10.2
Bonjour,
Sans vous aider sur votre script, je vous signal la présence de l'outil Comparaison de tables, peut-être qu'il répond au besoin?
https://desktop.arcgis.com/fr/arcmap/10 … ompare.htm
Martin
Hors ligne
#4 Thu 03 November 2016 09:32
- JPr31
- Participant occasionnel
- Date d'inscription: 7 Jun 2012
- Messages: 15
Re: Comparer valeurs entre 2 tables de même structure (PYTHON) ArcGIS 10.2
Merci pour votre réponse!
Le soucis est que j'utilise Arcmap 10.2 et cet outil ne fonctionne qu'avec la 10.3. D'où ma volonté de créer un petit script.
Hors ligne
#5 Thu 03 November 2016 09:46
Re: Comparer valeurs entre 2 tables de même structure (PYTHON) ArcGIS 10.2
Comparaison de tables (Gestion des données) -> Aide ArcGIS (10.2, 10.2.1 et 10.2.2)
http://resources.arcgis.com/fr/help/mai … 0007000000
Hors ligne
#6 Fri 04 November 2016 14:25
- JPr31
- Participant occasionnel
- Date d'inscription: 7 Jun 2012
- Messages: 15
Re: Comparer valeurs entre 2 tables de même structure (PYTHON) ArcGIS 10.2
Merci pour votre aide,
Après un test avec le TableCompare_management, le résultat ne me convient pas. Je n'obtiens qu'un .txt dont les messages ne me servent pas.
Je cherche encore mais merci
Hors ligne
#7 Fri 04 November 2016 15:26
Re: Comparer valeurs entre 2 tables de même structure (PYTHON) ArcGIS 10.2
Bonjour,
Toujours sans vous aider sur votre bout de code Python, il existe l'outil ChangeDetector (je n'ai pas testé)
http://www.arcgis.com/home/item.html?id … 5ef4a8c5b7
Detects changes between two feature classes and writes three new feature classes
Martin
Hors ligne
#8 Mon 07 November 2016 15:31
- JPr31
- Participant occasionnel
- Date d'inscription: 7 Jun 2012
- Messages: 15
Re: Comparer valeurs entre 2 tables de même structure (PYTHON) ArcGIS 10.2
Bonjour,
Je viens de tester cet outils. Je l'ai configuré un peu "à ma sauce" et il fonctionne très bien.
Dans sa configuration d'origine, il détecte les lignes ajoutés ou manquantes par rapport à un champ choisi ( OID ), après avoir effectué des changements dans les paramètres du script et deux bidouilles dans le script j'arrive à obtenir ce que je souhaite.
Merci beaucoup Martin pour ton aide en espérant que cela pourra servir à d'autres.
Hors ligne
Pages: 1
- Sujet précédent - Comparer valeurs entre 2 tables de même structure (PYTHON) ArcGIS 10.2 - Sujet suivant