Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comparer 2 fichiers texte et remplacer

    22 mars 2019 à 12:46:57

    Bonjour,

    J'ai 2 fichiers .txt et je cherche un script pour comparer et remplacer les 2 fichiers

    Exemple

    fichier1:

    2000	Yay+0
    2001	Yay+1
    2002	Yay+2
    2003	Yay+3
    2004	Yay+4
    2005	Yay+5
    2006	Yay+6
    2007	Yay+7
    2008	Yay+8
    2009	Yay+9

    fichier 2:

    2000	Arc court+0
    2001	Arc court+1
    2002	Arc court+2
    2003	Arc court+3
    2004	Arc court+4
    2005	Arc court+5
    2006	Arc court+6
    2007	Arc court+7
    2008	Arc court+8
    2009	Arc court+9

    Mais j'ai plus de 7000 lignes à traduire

    Si quelqu'un pourrait m'aider, je crois que c'est possible depuis notepad avec le plugin python script mais je n'arrive pas à l'installer

    Merci d'avance


    • Partager sur Facebook
    • Partager sur Twitter
      22 mars 2019 à 13:17:47

      Qu'est ce que tu souhaites en sortie exactement ?
      • Partager sur Facebook
      • Partager sur Twitter
        22 mars 2019 à 13:23:33

        Salut,

        Je souhaite prendre toutes les lignes du fichier 2 en remplacent les lignes du fichier 1 et qui ignore les lignes qui n'existe pas/différente

        Pour te faire une idée à quoi cela ressemble :

        • Partager sur Facebook
        • Partager sur Twitter
          22 mars 2019 à 14:12:10

          Donc en gros si on a ça :

          fichier1

          1 Machin+0
          2 Truc+0
          3 Bidule+0

          fichier2

          1 Machin+0
          3 Trucbidule+0
          4 Autrechose+0


          en sortie il faudra ça ?

          1 Machin+0
          2 Truc+0
          3 Trucbidule+0
          4 Autrechose+0

          -
          Edité par thelinekioubeur 22 mars 2019 à 14:12:31

          • Partager sur Facebook
          • Partager sur Twitter
            22 mars 2019 à 14:19:09

            Non pas ça je crois que je me suis mal exprimé, il ne faut pas rajouter de ligne, juste remplacer les lignes déjà existantes (commune entre les 2 fichiers si je puis dire)

            Et que si des lignes sont en plus (non commun entre les 2), ne pas les prendre en compte (ça je pourrais le faire manuellement)

            Merci de ton aide

            Edit :

            Apres : 

            Je ne peux pas faire un simple copier-coller vu que ça n'a pas la même structure et c'est sensible à la casse

            -
            Edité par Quentin CUNY 22 mars 2019 à 14:33:02

            • Partager sur Facebook
            • Partager sur Twitter
              22 mars 2019 à 15:18:57

              Ok, et le séparateur c'est bien 4 espaces ?

              Tu peux essayer ça :

              def open_file(filename):
                  res = {}
                  with open(filename) as file:
                      for line in file.readlines():
                          num, val = line.split("    ", 1)
                          res[num] = val
                  return res
              
              
              file1 = open_file("fichier1.txt")
              file2 = open_file("fichier2.txt")
              
              with open("out.txt", "w") as f:
                  for key in sorted(file1.keys()):
                      value = file2.get(key) or file1[key]
                      f.write(key + "    " + value)



              -
              Edité par thelinekioubeur 22 mars 2019 à 15:43:36

              • Partager sur Facebook
              • Partager sur Twitter
                22 mars 2019 à 15:35:32

                Merci beaucoup , mais non c'est une tabulation

                -
                Edité par Quentin CUNY 22 mars 2019 à 15:35:53

                • Partager sur Facebook
                • Partager sur Twitter
                  22 mars 2019 à 15:41:47

                  Dans ce cas remplace les deux "    " par des "\t" lignes 5 et 16.

                  -
                  Edité par thelinekioubeur 22 mars 2019 à 15:42:17

                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 mars 2019 à 15:52:36

                    J'ai crée dossier "python" sur le bureau avec le fichier script.py que tu m'as donné
                    cd /desktop/python
                    puis python script.py

                    Et j'ai ce message

                    Merci d'avance (désolé je débute avec python)

                    -
                    Edité par Quentin CUNY 22 mars 2019 à 15:52:57

                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 mars 2019 à 16:28:45

                      Tu dois avoir des lignes qui n'ont pas de tabulation...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 mars 2019 à 16:46:56

                        C'est de ma faute, j'ai recopié le code du script et recommencé en prenant bien soin de rajoute \t pour la ligne 5 et 16 voila ce que j'ai :

                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 mars 2019 à 17:07:55

                          Euh là je ne sais pas, essaye de rajouter cette ligne en première ligne du fichier script.py :

                          # coding: utf-8


                          Et vérifie que ton fichier est bien en utf-8

                          -
                          Edité par thelinekioubeur 22 mars 2019 à 17:08:29

                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 mars 2019 à 17:09:14

                            @Quentin,

                            Ton problème est incompréhensible et @thelinekioubeur s'évertue à essayer de comprendre ce que tu souhaites faire.

                            Il aurait été tellement plus simple (plutôt que tes screens illisibles) de reprendre ton 1er exemple, et d'y ajouter la sortie attendue.

                            J'ai 2 fichiers .txt et je cherche un script pour comparer et remplacer les 2 fichiers

                            Ça ne veut rien dire et les détails manquent !

                            Je souhaite prendre toutes les lignes du fichier 2 en remplacent les lignes du fichier 1 et qui ignore les lignes qui n'existe pas/différente

                            Toujours pas compris... et ne veut toujours rien dire, sauf pour toi peut-être.

                            À la vue de tes difficultés à t'exprimer sur le problème, je pense que tu as de gros problèmes à connaître la solution algorithmique qui résoudra ton problème.

                            P.S Tu as de la chance qu'une personne se penche sur un sujet si mal exprimé...

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                            La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                              22 mars 2019 à 17:50:14

                              Je recommence donc!

                              Je cherche à traduire 1 fichiers textes pour un jeu (listes d'objets) et le traduire, un texte qui est traduis en turque et l'autre en français avec une structure différente (certaines lignes sont manquante entre les 2 donc des décalages):

                              Chaque objet correspond à un nombre prédéfini, et je cherche un script pour faire un remplacement pour chaque valeur (début de ligne) par le texte du fichier texte français

                              Exemple :

                              Fichier FR

                              70253	Bidule
                              70254	Machin
                              70301	Truc
                              70302	Autrechose

                              Fichier Turque

                              70253	Yeşil Ot
                              70254	Mor Ot
                              70255	Rüya Ruhu
                              70301	Söz Yüzüğü
                              70302	Nikah Yüzüğü

                              Qui donnerai: (valeur 70255 n'est pas sur le premier fichier donc à ignorer que je ferais manuellement)

                              70253	Bidule
                              70254	Machin
                              70255	Rüya Ruhu
                              70301	Truc
                              70302	Autrechose

                              Je pense pas pouvoir être plus clair 

                              -
                              Edité par Quentin CUNY 22 mars 2019 à 18:03:20

                              • Partager sur Facebook
                              • Partager sur Twitter
                                22 mars 2019 à 18:07:46

                                Juste l'exemple est clair et suffisait ! ;)

                                EDIT:

                                Non testé, j'ai fais ça en vitesse

                                import os
                                
                                SIZE = 1024 * 1024
                                WORDS = [None for _ in range(SIZE)]
                                
                                def readFile(path):
                                    if not os.path.exists(path):
                                        raise OSError('file does not exist, bad path -> {}'\
                                            .format(path)
                                        )
                                    
                                    with open(path, 'r') as f:
                                        for line in f:
                                            n, word = line.split()
                                            value = WORDS[n]
                                            if not value:
                                                WORDS[n] = word
                                
                                f1 = readFile('francais.txt')
                                f2 = readFile('turc.txt')
                                
                                with open('result.txt', 'w') as f3:
                                    for n, word in enumerate(WORDS):
                                        if word:
                                            f3.write('{}\t{}\n'.format(n, word))
                                



                                -
                                Edité par fred1599 22 mars 2019 à 18:42:01

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                                La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                                  22 mars 2019 à 19:09:24

                                  Merci pour ton aide, voila le résultat (en prenant bien soin de renommer "francais.txt" et "turc.txt" mais j'obtiens cet erreur:
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    22 mars 2019 à 19:17:05

                                    import os
                                     
                                    SIZE = 1024 * 1024
                                    WORDS = [None for _ in range(SIZE)]
                                     
                                    def readFile(path):
                                        if not os.path.exists(path):
                                            raise OSError('file does not exist, bad path -> {}'\
                                                .format(path)
                                            )
                                         
                                        with open(path, 'r') as f:
                                            for line in f:
                                                n, word = line.split()
                                                n = int(n)
                                                value = WORDS[n]
                                                if not value:
                                                    WORDS[n] = word
                                     
                                    f1 = readFile('francais.txt')
                                    f2 = readFile('turc.txt')
                                     
                                    with open('result.txt', 'w') as f3:
                                        for n, word in enumerate(WORDS):
                                            if word:
                                                f3.write('{}\t{}\n'.format(n, word))
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                                    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                                      22 mars 2019 à 19:34:56

                                      Eh bien c'est pas compliqué, le format que tu m'as donné n'est pas bon, c'est à dire pas de la forme 

                                      entier  chaîne

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                                      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                                        22 mars 2019 à 19:41:21

                                        Pourtant regarde les screens au dessus, c'est partout comme ça je comprends pas.. Je peux te donner les fichiers si tu veux, pour voir
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          22 mars 2019 à 19:46:29

                                          import os
                                            
                                          SIZE = 1024 * 1024
                                          WORDS = [None for _ in range(SIZE)]
                                            
                                          def readFile(path):
                                              if not os.path.exists(path):
                                                  raise OSError('file does not exist, bad path -> {}'\
                                                      .format(path)
                                                  )
                                                
                                              with open(path, 'r') as f:
                                                  for line in f:
                                                      n, word = line.split()
                                                      try:
                                                          n = int(n)
                                                          value = WORDS[n]
                                                          if not value:
                                                              WORDS[n] = word
                                                      except ValueError:
                                                          print('error format line: {}'.format(line))
                                            
                                          f1 = readFile('francais.txt')
                                          f2 = readFile('turc.txt')
                                            
                                          with open('result.txt', 'w') as f3:
                                              for n, word in enumerate(WORDS):
                                                  if word:
                                                      f3.write('{}\t{}\n'.format(n, word))
                                          On va voir ça !
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                                          La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                                            22 mars 2019 à 19:49:27

                                            Trop de ligne ?

                                            -
                                            Edité par Quentin CUNY 22 mars 2019 à 19:49:58

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              22 mars 2019 à 19:51:06

                                              import os
                                                 
                                              SIZE = 1024 * 1024
                                              WORDS = [None for _ in range(SIZE)]
                                                 
                                              def readFile(path):
                                                  if not os.path.exists(path):
                                                      raise OSError('file does not exist, bad path -> {}'\
                                                          .format(path)
                                                      )
                                                     
                                                  with open(path, 'r') as f:
                                                      for line in f:
                                                          n, word, *_ = line.split()
                                                          try:
                                                              n = int(n)
                                                              value = WORDS[n]
                                                              if not value:
                                                                  WORDS[n] = word
                                                          except ValueError:
                                                              print('error format line: {}'.format(line))
                                                 
                                              f1 = readFile('francais.txt')
                                              f2 = readFile('turc.txt')
                                                 
                                              with open('result.txt', 'w') as f3:
                                                  for n, word in enumerate(WORDS):
                                                      if word:
                                                          f3.write('{}\t{}\n'.format(n, word))
                                              
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                                              La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                                                22 mars 2019 à 19:59:59

                                                Envoie tes fichiers ce sera plus facile
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  22 mars 2019 à 20:05:11

                                                  import os
                                                      
                                                  SIZE = 1024 * 1024
                                                  WORDS = [None for _ in range(SIZE)]
                                                      
                                                  def readFile(path):
                                                      if not os.path.exists(path):
                                                          raise OSError('file does not exist, bad path -> {}'\
                                                              .format(path)
                                                          )
                                                          
                                                      with open(path, 'r') as f:
                                                          for line in f:
                                                              if line:
                                                                  n, word, *_ = line.split()
                                                                  try:
                                                                      n = int(n)
                                                                      value = WORDS[n]
                                                                      if not value:
                                                                          WORDS[n] = word
                                                                  except ValueError:
                                                                      print('error format line: {}'.format(line))
                                                      
                                                  f1 = readFile('francais.txt')
                                                  f2 = readFile('turc.txt')
                                                      
                                                  with open('result.txt', 'w') as f3:
                                                      for n, word in enumerate(WORDS):
                                                          if word:
                                                              f3.write('{}\t{}\n'.format(n, word))
                                                  Dernier essai en ce qui me concerne
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                                                  La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                                                    22 mars 2019 à 20:18:54

                                                    Tu n'avais pas dit qu'il y avait des lignes entièrement vides ^^

                                                    # coding: utf-8
                                                    def open_file(filename):
                                                        res = {}
                                                        with open(filename) as file:
                                                            for line in file.readlines():
                                                                if line.strip():
                                                                    num, val = line.strip().split("\t", 1)
                                                                    res[num] = val
                                                        return res
                                                    
                                                    
                                                    file1 = open_file("francais.txt")
                                                    file2 = open_file("turc.txt")
                                                    
                                                    with open("out.txt", "w") as f:
                                                        for key in sorted(file1.keys()):
                                                            value = file2.get(key) or file1[key]
                                                            f.write(key + "\t" + value)
                                                    



                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      22 mars 2019 à 20:33:01

                                                      Voilà une autre solution

                                                      import os
                                                           
                                                      SIZE = 1024 * 1024
                                                      WORDS = [None for _ in range(SIZE)]
                                                           
                                                      def readFile(path):
                                                          if not os.path.exists(path):
                                                              raise OSError('file does not exist, bad path -> {}'\
                                                                  .format(path)
                                                              )
                                                               
                                                          with open(path, encoding="ascii", errors='ignore') as f:
                                                              for line in f:
                                                                  line = line.strip()
                                                                  if line:
                                                                      n, *word = line.split()
                                                                      try:
                                                                          n = int(n)
                                                                          value = WORDS[n]
                                                                          if not value:
                                                                              if word:
                                                                                  WORDS[n] = word[0]
                                                                      except ValueError:
                                                                          print('error format line: {}'.format(line))
                                                           
                                                      f1 = readFile('francais.txt')
                                                      f2 = readFile('turc.txt')
                                                           
                                                      with open('result.txt', 'w') as f3:
                                                          for n, word in enumerate(WORDS):
                                                              if word:
                                                                  f3.write('{}\t{}\n'.format(n, word))
                                                      

                                                      et il y a aussi une ligne mal formée, celle présenté ci-dessous

                                                      VNUM	LOCALE_NAME




                                                      • Partager sur Facebook
                                                      • Partager sur Twitter

                                                      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                                                      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                                                        22 mars 2019 à 20:43:10

                                                        Merci !!

                                                        Mais sur vos 2 solutions il y a un problème

                                                        @thelinekioubeur ça me mets tout sur 1 ligne

                                                        @fred1599 ça me décompose (retour à la ligne à chaque mot)

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        Comparer 2 fichiers texte et remplacer

                                                        × 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