Partage
  • Partager sur Facebook
  • Partager sur Twitter

Changement donnees hexa en masse avec incrementati

Sujet résolu
    12 août 2019 à 20:56:33

    bonjour voila pour être bref je voudrais changer 6 caractères hexa mais dans plusieurs fichiers

    je m`explique j`ai conçu ce code :

    fichier1 = "fichier.dat"
    with open(fichier1, "rb") as fs:
        contenu = fs.read() # le contenu est de type "bytes" (=octets)
     
    octet1 = bytes.fromhex('7AEB02') # octet à chercher
    octet2 = bytes.fromhex('7AEB03') # octet à mettre à la place
    index = contenu.find(octet1)
    if index<0:
        print("Octet non trouvé!")
    else:
        print("Octet cherché se trouve à l'index:", index)
        contenu = contenu[:index] + octet2 + contenu[index+1:]
     
    fichier2 = "fichier2.dat"
    with open(fichier2, "wb") as fd:
        fd.write(contenu)


    le fichier.dat contient 7AEB02 ensuite remplacer par 7AEB03 puis écrire le nouveau fichier dans fichier2.dat
    en gros la suite est de ré-ouvrir fichier2.dat et incrémenter la valeur hexa de 1 est l`écrire dans fichier3.dat ect.....
    je bloque sur une boucle apparemment.

    merci d`avance de votre aide :)

    • Partager sur Facebook
    • Partager sur Twitter
      12 août 2019 à 22:13:54

      cadeau:

      data = bytes.fromhex('7AEB02')
      value = int.from_bytes(data, 'big')
      
      fichier1 = "fichier.dat"
      with open(fichier1, "rb") as fs:
          contenu = fs.read() # le contenu est de type "bytes" (=octets)
      index = contenu.find(data)
      if index<0:
          print("Octet non trouvé!")
          exit()
          
      print('index', index, 'contenu', contenu)    
      count = 5
      for k in range(1, count):
          with open(f'fichier{k}.dat') as f:
              f.write(contenu[index:] + bytes.fromhex(hex(value)[2:]) + contenu[index+3:])
          value += 1
      

      (non testé)

      • Partager sur Facebook
      • Partager sur Twitter
        12 août 2019 à 22:38:12

        sequence = bytes.fromhex("7AEB02")
        
        with open("fichier.dat", "rb") as file:
            data = file.read()
        
        index = data.find(sequence)
        if index < 0:
            print("Octet non trouvé !")
        else:
            print("Séquence", sequence, "trouvée à la position", index)
        
        • Partager sur Facebook
        • Partager sur Twitter
          13 août 2019 à 18:48:09

          merci beaucoup c`est super gentil mais des erreur apparaissent

          C:\Users\Thor\Desktop>1.py
            File "C:\Users\Thor\Desktop\1.py", line 9
          SyntaxError: Non-ASCII character '\xc3' in file C:\Users\Thor\Desktop\1.py on line 9, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

          C:\Users\Thor\Desktop>1.py
            File "C:\Users\Thor\Desktop\1.py", line 14
              with open(f'fichier{k}.dat') as f:
                                        ^
          SyntaxError: invalid syntax

          • Partager sur Facebook
          • Partager sur Twitter
            13 août 2019 à 19:22:10

            Vous utilisez quelle version de Python?

            La version courante de Python est 3.7.

            • Partager sur Facebook
            • Partager sur Twitter
              13 août 2019 à 20:29:43

              2.7 pourquoi cela n`est pas bon ?
              • Partager sur Facebook
              • Partager sur Twitter
                13 août 2019 à 20:44:18

                Kosteloos a écrit:

                2.7 pourquoi cela n`est pas bon ?


                Cela explique les erreurs que vous avez.

                Vous avez le choix entre mettre à jour Python ou le ré-écrire un peu pour qu'il soit comestible par votre version de Python.

                • Partager sur Facebook
                • Partager sur Twitter
                  13 août 2019 à 20:55:36

                  j`avance bien mais une erreur s`ajoute

                  Traceback (most recent call last):
                    File "1.py", line 16, in <module>
                      f.write(contenu[index:] + bytes.fromhex(hex(value)[2:]) + contenu[index+3:])
                  TypeError: write() argument must be str, not bytes

                  -
                  Edité par Kosteloos 13 août 2019 à 21:11:45

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 août 2019 à 8:02:53

                    Kosteloos a écrit:

                    j`avance bien mais une erreur s`ajoute

                    Traceback (most recent call last):
                      File "1.py", line 16, in <module>
                        f.write(contenu[index:] + bytes.fromhex(hex(value)[2:]) + contenu[index+3:])
                    TypeError: write() argument must be str, not bytes

                    Effectivement, dans with open(f'fichier{k}.dat') as f:, j'ai omis de préciser qu'on doit ouvrir le fichier en écriture et en binaire.

                    Mais vous l'avez déjà corrigé en partie sinon les erreurs auraient été FileNotFoundError ou io.UnsupportedOperation...

                    -
                    Edité par mps 14 août 2019 à 8:07:08

                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 août 2019 à 15:07:22

                      merci beaucoup tout est parfait a part une petite chose

                      je prend un exemple fichier1.txt contenant comme hexa : 61 62 63 64 65 66

                      data = bytes.fromhex('616263646566')
                      value = int.from_bytes(data, 'big')
                       
                      fichier1 = "1.txt"
                      with open(fichier1, "rb") as fs:
                          contenu = fs.read() # le contenu est de type "bytes" (=octets)
                      index = contenu.find(data)
                      if index<0:
                          print("Octet non trouvé!")
                          exit()
                           
                      print('index', index, 'contenu', contenu)   
                      count = 5
                      for k in range(1, count):
                          with open(f'fichier{k}.dat', "wb") as f:
                              f.write(contenu[index:] + bytes.fromhex(hex(value)[2:]) + contenu[index+3:])
                          value += 1

                      voici le resultat obtenu :

                      fichier1 : 61 62 63 64 65 66 61 62 63 64 65 66 64 65 66

                      fichier2 : 61 62 63 64 65 66 61 62 63 64 65 67 64 65 66

                      fichier3 : 61 62 63 64 65 66 61 62 63 64 65 68 64 65 66  ect......  au lieu de faire 616263646566 616263646567 616263646568 ect.....

                      c`est bon, après quelque modification tout est ok encore milles merci c`est très gentil de m`avoir prêter attention :)

                      -
                      Edité par Kosteloos 14 août 2019 à 16:29:33

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Changement donnees hexa en masse avec incrementati

                      × 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