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 deux fichiers en Python


Sujet :

Python

Vue hybride

Gamoth Comparer deux fichiers en... 06/07/2009, 10h07
ctiti60 Salut, Dans la librairie... 06/07/2009, 10h25
kango bonjour, si tu veux juste... 06/07/2009, 10h34
Gamoth pour la librairie difflib je... 06/07/2009, 10h55
tyrtamos Bonjour, Comme je ne... 06/07/2009, 11h04
kango je suis conscient des pbs de... 06/07/2009, 11h51
eyquem En considérant comme premier... 06/07/2009, 12h26
tyrtamos Je ne me plaçais pas... 06/07/2009, 12h51
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Par défaut Comparer deux fichiers en Python
    Bonjour,

    Je lis régulièrement ce forum et jusqu'à présent je trouvais mon bonheur.

    Je dois develloper un programme de triage en Python.
    J'ai besoin d'une fonction qui me permette de comparer deux fichiers, elle devra me dire si ils sont identiques ou non.
    Un diff en python en fait.

    Avez-vous une idée sur une manière de faire ou même une fonction déja existante?


    Merci d'avance

    Bonne journée

  2. #2
    Membre éclairé Avatar de ctiti60
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut
    Salut,

    Dans la librairie difflib, tu n'as pas ton bonheur ?

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    si tu veux juste savoir s'ils sont identiques ou différents mais sans connaitre les différences, tu peux aussi utiliser les tables de hashage:

    http://docs.python.org/library/hashl...module-hashlib

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Par défaut
    pour la librairie difflib je n'arrive pas à m'en servir
    Et pour la hashlib c'est pareil ils veulent une chaine de caractère et moi j'ai des fichiers.

    Sinon j'ai essayé d'ouvrir les deux fichiers avec open,de faire un readlines et de comparer les deux chaines de caractères mais je trouve ça assez moche.

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Comme je ne trouvais pas non plus de fonction toute faite qui faisait ça, j'ai développé la mienne:

    http://python.jpvweb.com/mesrecettes...omparefichiers

    On fait ici une comparaison du contenu, sans tenir compte des metadatas (à part la taille, bien entendu).

    Selon le contexte, on pourrait aussi (plus rapide et plus simple) vérifier seulement la taille et la dernière date de modif.

    Il y a déjà eu une discussion sur ce sujet sur ce site. Le problème du hashcode, c'est d'une part qu'il faut tout lire pour avoir le hash même si les 2 fichiers sont différents à partir du 1er octet, et d'autre part qu'un hashcode identique ne donne pas une certitude absolue d'identité des 2 fichiers, mais seulement une très haute probabilité.

    Tyrtamos

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    un hashcode identique ne donne pas une certitude absolue d'identité des 2 fichiers, mais seulement une très haute probabilité.
    je suis conscient des pbs de sécurité de certains algorithme de hashage qui font que effectivement ils ne sont pas "fiables" à 100%.

    néanmoins, contourner la sécurité de ces algo nécessite d'introduire un "code de bourrage" extrêmement spécifique si j'ai bien compris.

    pour que l'algo ne soit pas fiable, il me semble qu'il faille une réelle intention de nuire, c'est à dire pirater le fichier hashé.

    fais tu allusion à autre chose lorsque tu dis que ce n'est pas fiable ?

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    En considérant comme premier intérêt la détermination de l’endroit où deux fichiers commencent à différer, voici un code fruste et efficace (soyez indulgents Msieurs-dames):

    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
    19
    20
    21
    f = open('fichier un.txt')
    g = open('fichier deux.txt')
    ch1 = f.read()
    ch2 = g.read()
    print 'Taille du fichier un   :',len(ch1)
    print 'Taille du fichier deux :',len(ch2)
     
    for x in xrange(min(len(ch1),len(ch2))):
        if ch1[x]!=ch2[x]:
            print "\nLes deux fichiers sont identiques jusqu'à:\n"
            deb = x-100
            if deb<0:
                print repr(ch1[0:x])
            else:
                print "..........."+repr(ch1[deb:x])
            print "\nPuis les deux caractères suivants sont différents:"
            print "fichier un:\n"+repr(ch1[x:x+100])
            print "\nfichier deux:\n"+repr(ch2[x:x+100])
     
    f.close()
    g.close()


    fais tu allusion à autre chose lorsque tu dis que ce n'est pas fiable ?
    Oui, il fait allusion au fait que le hashage, en visant à réduire le contenu d’un fichier à une succession de caractères qui le code comme si c’en était une sorte de compression (c’est comme ça que je comprends la chose, soyez indulgents Msieurs-dames), il se peut très bien que pour deux fichiers complétement différents, malgré la complexité des calculs de hashage, les hash qui sortent pour ces deux fichiers soient identiques. Dit autrement, on ne peut pas représenter par des hash (de longueur nécessairement limitée) tous différents tous les fichiers existants et à venir; donc il existe des hash identiques pour des fichiers différents. Il suffit de tomber sur deux d’entre eux dans un code pour fissurer les 100%.

  8. #8
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Je ne me plaçais pas particulièrement dans un cadre de sécurité informatique.

    Je crois que le hashcode se justifie quand on veut vérifier que des fichiers n'ont pas été modifiés, en les comparant à leur hashcode précédemment calculé. Dans ce cas, il suffit de conserver les hashcodes précédents pour faire cette vérification, et c'est assez pratique car ça évite de comparer avec les fichiers précédemment sauvegardés ailleurs. C'est aussi le cas, par exemple, pour vérifier le téléchargement des images iso linux (md5 ou sha).

    Mais quand il s'agit de comparer les contenus de 2 fichiers, les tests progressifs sont en même temps plus rapides (on arrête à la 1ère différence) et plus sûrs (probabilité=1).

    En fait, il est difficile de raisonner dans le vide: il y a probablement d'autres cas où l'une ou l'autre des solutions est la plus adaptée.

    Tyrtamos

Discussions similaires

  1. comparer deux fichier .xls
    Par oursquetaire dans le forum Excel
    Réponses: 6
    Dernier message: 06/07/2006, 16h52
  2. [JDOM] Comparer deux fichiers XML en Java
    Par calimero2611 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 30/06/2006, 11h19
  3. Comparer deux fichier
    Par Taz_8626 dans le forum Langage
    Réponses: 3
    Dernier message: 20/06/2006, 11h46
  4. comparer deux fichiers avec une api windows
    Par sweetdreamer dans le forum Windows
    Réponses: 4
    Dernier message: 25/05/2006, 22h10
  5. Fonction c qui compare deux fichiers ???
    Par babyface dans le forum C
    Réponses: 4
    Dernier message: 19/11/2005, 13h07

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