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 :

Changement donnees hexa en masse


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    patissier
    Inscrit en
    Août 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : patissier
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2019
    Messages : 4
    Par défaut Changement donnees hexa en masse
    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 :

    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
     
    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

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Tu n'as pas besoin d'ouvrir le fichier 2 puisque tu connais déjà son contenu.

    Incrémente directement contenu[index] et crée le fichier 3.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par kosteloos Voir le message
    je bloque sur une boucle apparemment.
    Pour écrire une boucle, il faut définir les instructions à répéter, les variables qui changent à l'itération suivante (et celles qui ne changent pas), et une condition d'arrêt (pour que la boucle se termine).

    Citation Envoyé par kosteloos Voir le message
    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.....
    fichier1.dat, fichier2.dat,... c'est le contenu de fichier.dat avec la "valeur hexa" incrémentée à chaque itération: inutile donc de relire le dernier fichier créé.

    note: votre code ne fait pas ce que vous dites, comparez la longueur de la chaine lue et de la chaine écrite vous devriez trouver 2 octets de plus.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Futur Membre du Club
    Homme Profil pro
    patissier
    Inscrit en
    Août 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : patissier
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2019
    Messages : 4
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Pour écrire une boucle, il faut définir les instructions à répéter, les variables qui changent à l'itération suivante (et celles qui ne changent pas), et une condition d'arrêt (pour que la boucle se termine).



    fichier1.dat, fichier2.dat,... c'est le contenu de fichier.dat avec la "valeur hexa" incrémentée à chaque itération: inutile donc de relire le dernier fichier créé.

    note: votre code ne fait pas ce que vous dites, comparez la longueur de la chaine lue et de la chaine écrite vous devriez trouver 2 octets de plus.

    - W
    les deux octets de plus ne sont plus présent merci mais toujours bloquer j`ai mis a jour mon code mais la je ne comprends plus

    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
    22
     
    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:
        #for i in range(0, 10):      # how many times you want to increment
        #i = int(octet1, 16)     # define i as the decimal equivalent of varhex
        #i +=1                   # increment i by one
        #print (hex(i))          # print out the incremented value, but in hex form
        #octet1 = hex(i) 
        print("Octet cherché se trouve à l'index:", index)
        contenu = contenu[:index] + octet1 + contenu[index+3:]
     
    fichier2 = "fichier2.dat" #(i)
    with open(fichier2, "wb") as fd:
        fd.write(contenu)

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par kosteloos Voir le message
    j`ai mis a jour mon code mais la je ne comprends plus
    Vous ne comprenez plus quoi?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Futur Membre du Club
    Homme Profil pro
    patissier
    Inscrit en
    Août 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : patissier
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2019
    Messages : 4
    Par défaut
    voici l`incrementation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #for i in range(0, 10):      # how many times you want to increment
        #i = int(octet1, 16)     # define i as the decimal equivalent of varhex
        #i +=1                   # increment i by one
        #print (hex(i))          # print out the incremented value, but in hex form
        #octet1 = hex(i)
    mais quand j`essai de l`implanter cela ne fonctionne pas

  7. #7
    Futur Membre du Club
    Homme Profil pro
    patissier
    Inscrit en
    Août 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : patissier
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2019
    Messages : 4
    Par défaut
    Nouveau code

    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
     
    fichier1 = "fichier.dat"
    with open(fichier1, "rb") as fs:
        contenu = fs.read() # le contenu est de type "bytes" (=octets)
    for i in range(0, 10):      # how many times you want to increment
        octet1 = bytes.fromhex('7AEB02') # octet à chercher
        octet2 = bytes.fromhex('7AEB03') # octet à mettre à la place
        index = contenu.find(octet1)
        i = octet1     # define i as the decimal equivalent of varhex
        i += 1
    if index<0:
        print("Octet non trouvé!")
    else:
        #print (hex(i))          # print out the incremented value, but in hex form 
        print("Octet cherché se trouve à l'index:", index)
        contenu = contenu[:index] + octet1 + contenu[index+3:]
     
    fichier2 = "fichier2.dat"
    with open(fichier2, "wb") as fd:
        fd.write(contenu)
    mais une erreur se produit :

    Traceback (most recent call last):
    File "C:\Users\Thor\Desktop\1.py", line 9, in <module>
    i += 1
    TypeError: can't concat int to bytes

Discussions similaires

  1. copier donnees avec changement de feuilles
    Par dalo02 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/11/2011, 18h49
  2. Grosse masse de donnees
    Par topolino dans le forum Windows Communication Foundation
    Réponses: 6
    Dernier message: 16/11/2011, 11h23
  3. Réponses: 2
    Dernier message: 17/09/2009, 15h31
  4. manipulation de donnees en hexa sur vb
    Par fonRTT dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 30/04/2009, 20h04
  5. Changement de type de donnees avec une macro
    Par micbett dans le forum Modélisation
    Réponses: 9
    Dernier message: 01/04/2008, 21h26

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