IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Comparer les fichiers de 2 dossiers et sortir les différences


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Par défaut Comparer les fichiers de 2 dossiers et sortir les différences
    Bonjour

    Je dois analyser 2 dossiers comportant chacun 1 ou 2 sous dossier contenant une 20ene de fichiers
    Les 2 dossiers a analyser seront en grande partie identiques
    Les dossiers contiennent des fichiers de conf

    Le but est justement de repérer quelles sont les différences entre les 2 modèles

    J'ai essayé cette methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dc = filecmp.dircmp('chemin-dossier1', 'chemin-dossier2')
    dc.report_full_closure()
    Filecmp m'affiche toutes les infos sur les fichiers (identique, different, présent uniquement dans tel dossier)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    diff //chemin1/ //chemin2/
    Only in //chemin/ : ['fichier']
    Only in //chemin2/ : ['fichier', 'fichier']
    Identical files : ['fichier']
    Differing files : ['fichier', 'fichier']
    Common subdirectories : ['dossier']
    J'aimerais maintenant exploiter ce résultat, par exemple qu'il inspecte les fichiers qui suivent :
    Differing files : ['fichier', 'fichier']

    Par exemple qu'il ouvre le fichier de chaque coté et affiche la liste des différences
    J'ai vu le module difflib mais malgrés les exemples, je ne vois pas comment faire pour passer d'une liste de fichiers a une comparaison de ceux ci

    De plus, avec filecmp je tombe beaucoup sur des fichiers qu'il m'affiche comme : Quelle difference entre un "Common funny cases" et un "Differing" ?

    Je suis preneur de compléments sur ma méthode, mais aussi si vous me proposez toute autre approche

    Merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Par défaut
    Bonjour,

    Tu devrais regarder tu côte de difflib

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Par défaut
    Bonjour,

    Justement dans mon message j'explique que j'ai trouvé difflib, mais je n'ai pas réussi a adapter les exemples difflib a mon cas, je ne vois pas la manière de m'y prendre pour analyser les fichiers en fonction du résultat de filecmp (si c'est bien comme ca qu'il faut faire)

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Par défaut
    Un petit bout de code qui j'espère pourra t'aider
    ATTENTION, il s'agit de copiers / collers sans vérification de bouts de codes que j'avais fait il y a longtemps...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    print_diff_files(dircmp(expected, actual)
     
     
    def print_diff_files(comparison_result):
        # Loop on different files
        for name in comparison_result.diff_files:
            with open(os.path.join(comparison_result.left, name), mode='r') as expFile, \
                    open(os.path.join(comparison_result.right, name), mode='r') as actFile:
                expectedLines = expFile.readlines()
                actualLines = actFile.readlines()
                unified_diff = difflib.unified_diff(
                    expectedLines, actualLines, expFile, actFile)
                stdout.writelines(unified_diff)    
     
        # Go ahead into subdirectories
        for subdir in comparison_result.subdirs.values():
            print_diff_files(subdir)

  5. #5
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Par défaut
    Merci mais je crois qu'il manque ce qu'il y a dans comparaison_result non ?
    La liste des fichiers d'un coté et de l'autre ??

    J'ai essayé de faire quelquechose avec difflib

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fichier1 = open("/users/login/user/diff2.txt", "r" )
    fichier2 = open("/users/login/user/diff1.txt", "r" )
     
    fichier1_lignes=fichier1.readlines()
    fichier2_lignes=fichier2.readlines()
     
    import difflib
     
    d = difflib.Differ()
    diff = d.compare(fichier1_lignes, fichier2_lignes)
    print '\n'.join(diff)
    il m'affiche bien les "?" "+" "-" mais je ne vois pas comment m'y prendre pour mon problème a moi
    Surtout que visiblement difflib compte les espaces, donc il va voire différemment
    et
    Et des idées pour passer de la liste des fichiers differents, a une comparaison du contenu de chacun ?

    donc de ca avec les particularités des fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    diff //chemin1/ //chemin2/
    Only in //chemin/ : ['fichier']
    Only in //chemin2/ : ['fichier', 'fichier']
    Identical files : ['fichier']
    Differing files : ['fichier', 'fichier']
    Common subdirectories : ['dossier']
    à un contenu lisible de difflib avec les differences internes?

    Merci beaucoup

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Par défaut
    Bonjour,

    'comparison_result' est l'argument à passer à la méthode 'print_diff_files'. C'est ce qui est fait dans le ligne du dessus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print_diff_files(dircmp(expected, actual)
    Ce bout de code, affiche les différences entre les contenus de 2 fichiers textes. Pour afficher la liste des fichiers identiques et différents, tu avais déjà ce qu'il faut.
    Pour les espaces et lignes vides, il te faut regarder la doc, il devrait y avoir une option pour dire à difflib de ne pas tenir compte des espaces

Discussions similaires

  1. Lister les fichiers d'un dossier par page
    Par bwatex dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 17/08/2006, 19h09
  2. Réponses: 2
    Dernier message: 24/05/2006, 19h29
  3. Enumerer les fichiers d'un dossier
    Par Zazeglu dans le forum C
    Réponses: 5
    Dernier message: 10/03/2006, 22h28
  4. Réponses: 5
    Dernier message: 18/01/2006, 14h05
  5. [LG] Accéder à tous les fichiers d'un dossier
    Par arno15 dans le forum Langage
    Réponses: 3
    Dernier message: 27/10/2005, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo