Partage
  • Partager sur Facebook
  • Partager sur Twitter

comparaison de fichier texte

    21 mai 2013 à 17:03:59

    bonjour à tous,

    j'aimerais savoir comment réaliser un programme pour comparer des fichier texte.

    Enfaite le programme que j'utilise en ce moment pour comparer deux fichier texte l'un a l'autre et le suivant:

    f = open("mon fichier 1 txt"')
    g = open(mon fichier 2 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 "Les deux fichiers sont differents" 
    else:
        if ch1[x] == ch2[x] :
                print "les fichiers est identiques"
     
    f.close()
    g.close()

    Cependant maintenant j'aimerais combiner ce programme de comparaison de deux fichiers pour en faire un programme qui pourrais comparer plusieurs fichiers texte qui se trouve dan un répertoire précis a un autre fichier1 texte qui se trouve dans un autre répertoire. et donc si un des fichier est identique a celui du fichier1 le programme ouvrira le fichier identique a celle ci sinon il nous dira qu'il n'existe aucun de fichier identique dans le répertoire indiqué. Mais je n'y arrive pas a combiner le programme pour y arriver. pouvez vous m'aider s'il vous plaît a combiner ce programme pour comparer ces fichier avec un autre fichier??!!!??

    merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      21 mai 2013 à 17:18:13

      Ce qu'il y a de bien avec python, c'est qu'on se simplifie facilement la vie :)

      filecmp

      from os import listdir
      from os.path import join, isfile
      from filecmp import cmp
      
      def compare(path, directory):
          '''
          path -> chemin du fichier à comparer
          directory -> répertoire où se trouvent les fichiers à comparer
          '''
          list_cmp = [] # contiendra les fichiers identiques
          for files in listdir(directory): # pour tous les fichiers du répertoire
              path = join(directory, files) # on joint le répertoire et le fichier
              if isfile(path): # si c'est un fichier
                  comp = cmp(path, files) # comparaison entre les 2 fichiers
                  if comp: # Si ils sont identiques
                      list_cmp.append(path) # Ajout dans list_cmp
          return list_cmp # on retourne la liste des fichiers identiques
      
      # utilisation de la fonction
      
      print(compare("...", "..."))



      -
      Edité par Anonyme 21 mai 2013 à 18:40:41

      • Partager sur Facebook
      • Partager sur Twitter
        22 mai 2013 à 14:18:56

        salut fred1599

        je n'arrive pas applique ton programme. je suis débutant pour le langage python et la ton programme est un peu compliquer pour moi. il n'esxisterait pas un moins complexe?

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          22 mai 2013 à 21:05:14

          Bonjour,

          C'est pas comme ci j'avais pas mis de commentaires, hein? :p

          • Partager sur Facebook
          • Partager sur Twitter
            23 mars 2015 à 13:59:24

            Bonjour, 
            ce code a l'air tres sympa, mais j'ai cette erreur: 
            SyntaxError: Non-ASCII character '\xc3' in file C:/Users/Anonymous/Documents/Python Scripts/comparaisonfichier.py on line 8, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
            >>> 
            pourriez vous m'aider ?
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              23 mars 2015 à 14:15:35

              Si tu es en version 2.x, tu devrais placer cette ligne au tout début de ton script.

              # -*- coding: utf-8 -*-



              • Partager sur Facebook
              • Partager sur Twitter
                23 mars 2015 à 15:15:49

                Ah oui, effectivement ! 

                par contre, j'ai encore une autre erreur : 

                > runfile('C:/Users/Anonymous/Documents/Python Scripts/comparaisonfichier.py', wdir=r'C:/Users/Anonymous/Documents/Python Scripts')

                Traceback (most recent call last):

                  File "<stdin>", line 1, in <module>

                  File "C:\Users\Anonymous\Anaconda\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 580, in runfile

                    execfile(filename, namespace)

                  File "C:/Users/Anonymous/Documents/Python Scripts/comparaisonfichier.py", line 31, in <module>

                    compare('C:\Users\Anonymous\Documents\comparaison\arc_post.txt', 'C:\Users\Anonymous\Documents\comparaison')

                  File "C:/Users/Anonymous/Documents/Python Scripts/comparaisonfichier.py", line 23, in compare

                    comp = cmp(path, files) # comparaison entre les 2 fichiers

                  File "C:\Users\Anonymous\Anaconda\lib\filecmp.py", line 43, in cmp

                    s2 = _sig(os.stat(f2))

                WindowsError: [Error 2] Le fichier spécifié est introuvable: 'arc_post-py.txt'

                >>> 

                pourtant, le fichier est bien a la place que j'ai déclaré. Avez-vous une idée ? 

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  23 mars 2015 à 15:33:41

                  As-tu entré les chemins relatifs ou absolus ?

                  Tu devras mettre les chemins absolus et si cela est entré en brut, avec r'

                  chemin = r'C:\chemin\de\oldProgrammer\fichier.txt'



                  -
                  Edité par Anonyme 23 mars 2015 à 16:02:02

                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 mars 2015 à 15:53:57

                    Voici mes entrées :

                    (compare('C:\Users\Anonymous\Documents\comparaison\arc_post.txt', 'C:\Users\Anonymous\Documents\comparaison'))

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      23 mars 2015 à 15:55:40

                      il manque le r' pour indiquer que c'est une chaîne brute que tu souhaites prendre en compte...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 mars 2015 à 15:58:40

                        D'ailleurs tu as oublié de fermer ta chaîne dans ton post plus haut oldProgrammer.

                        Il faut faire r'' car sinon Python va comprendre que tu veux échapper les caractères qui suivent les backslashs.

                        -
                        Edité par InhumanRampage 23 mars 2015 à 16:04:38

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          23 mars 2015 à 16:01:50

                          oui je sais merci c'est un oubli, je vais éditer
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 mars 2015 à 15:18:28

                            Hello !

                            merci pour l'histoire des chemins!

                            neanmoins j'ai encore une petite question

                            Les fichiers que je cherche a comparer sont des suites de chiffres ligne par ligne

                            le premier c'est de la forme 4.7200000e+002, l'autre 472, et en plus, ils sont en str

                            du coup je voulais appliquer un map(atoi, mes_donnees) mais  ValueError: invalid literal for int() with base 10: ''..

                            avez-vous une idée ?

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              24 mars 2015 à 15:38:36

                              Pour Python, l'expression littérale 4.7200000e+002 est un float, pas un int.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 mars 2015 à 15:43:17

                                Finalement, j'ai fais un mix des 2 fonctions cites ci-dessus, et j'y ai mis ma sauce pour chercher tous les fichiers possible , ça fonctionne bien =)

                                Pardonnez-moi si le code est un moche a voir, j'ai commence le python il y a seulement quelques jours =)

                                en tout cas, merci de votre aide ! 

                                • from os import listdir
                                  from os.path import join, isfile
                                  
                                   
                                  
                                       
                                  directorypy = r'C:\Users\Anonymous\Documents\Python Scripts\Test utitaire-lecture ddc\final-ddc-python'  
                                  directorymat =  r'C:\Users\Anonymous\Documents\Python Scripts\Test utitaire-lecture ddc\final-ddc-matlab'
                                  
                                    
                                  list_cmp = [] # contiendra les fichiers identiques
                                  
                                  for files in listdir(directorypy): # pour tous les fichiers du répertoire
                                      pathpy = join(directorypy, files) # on joint le répertoire et le fichier
                                      pathmat = join(directorymat, files) # on joint le répertoire et le fichier
                                      if isfile(pathpy): # si c'est un fichier
                                          if isfile(pathmat):
                                              if isfile(pathpy):
                                               mat = open(pathpy) 
                                               py = open(pathmat) 
                                               linemat= mat.read() 
                                               linepy = py.read() 
                                    
                                               for x in xrange(min(len(linemat),len(linepy))): 
                                                    if linemat[x]!=linepy[x]: 
                                                        print "Les deux fichiers sont differents" 
                                               else: 
                                                    if linemat[x] == linepy[x] : 
                                                        print "les fichiers sont identiques"      
                                             
                                             
                                  


                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  24 mars 2015 à 15:48:35

                                  >>> float(4.7200000e+002).is_integer()
                                  True
                                  
                                  >>> int(4.7200000e+002)
                                  472
                                  

                                  >>> def cmp(s1, s2):
                                  ...     s1, s2 = map(float, [s1, s2])
                                  ...     if s1.is_integer() and s2.is_integer():
                                  ...         return int(s1) == int(s2)
                                  ... 
                                  >>> cmp('4.7200000e+002', '472')
                                  True
                                  


                                  -
                                  Edité par Anonyme 25 mars 2015 à 7:49:25

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  comparaison de fichier texte

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown