Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

nitram
Participant assidu
Lieu: Brest
Date d'inscription: 19 May 2009
Messages: 990
Site web

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

nitram
Participant assidu
Lieu: Brest
Date d'inscription: 19 May 2009
Messages: 990
Site web

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

nitram
Participant assidu
Lieu: Brest
Date d'inscription: 19 May 2009
Messages: 990
Site web

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

 

Pied de page des forums

Powered by FluxBB