2017-10-05 6 views
-6

Mon fichier binaire test.bin contientComment remplacer les octets dans un fichier binaire?

11 22 33 44 55 66 ... 

Je veux modifier la 3ème position avec AA et mon dossier devrait être comme

11 22 33 AA 55 66 .... 
+3

Vous n'avez pas posé de question ou montré le code qui vous pose problème. Pourquoi avez-vous tagué ceci avec Python et Perl? Dans quelle langue travaillez-vous? – Borodin

+0

Pourquoi avez-vous tagué la question avec ** Python-Requests **? Vous ne semblez pas utiliser la bibliothèque 'Requests' et votre question n'a rien à voir avec HTTP. – Borodin

Répondre

-1

Ouvrez le fichier pour la mise à jour en mode binaire, chercher à la position souhaitée dans le fichier, puis écrire le caractère de remplacement. Ce qui suit fonctionnera dans Python 2 et 3 et remplacera le 4ème octet du fichier (3ème position si compter de 0) avec 0xAA.

with open('test.bin', 'rb+') as f: 
    f.seek(3) 
    f.write(b'\xAA') 
+0

Merci .. Ça fonctionne bien .. –

+0

si ma chaîne hexagonale de la variable tenue et comment nous allons faire l'expérience ci-dessus avec via variable? j'ai essayé de le faire de la façon suivante, x = '7A' y = int (x, 16) z = '% x' % y impression (z) avec ouverte ('test.bin', 'rb +') comme f: \t f.seek (3) \t f.write (bz) Et son erreur de lancer comme, « retraçage (appel le plus récent en dernier): fichier "3.py", ligne TypeError: 'str' ne prend pas en charge l'interface tampon " –

+0

@NarendraThamatam: vous devez écrire un objet' bytes', pas un objet 'str'. BTW '7A' est une chaîne contenant 2 caractères. Je pense que vous devez écrire le seul octet avec la valeur 0x7A. Convertir à partir d'une chaîne hexadécimale avec 'binascii.unhexlify (s)', par ex. 'binascii.unhexlify ('7A')' retournera l'objet bytes 'b'z'', et' binascii.unhexlify ('AA') 'retournera' b '\ xaa'' – mhawke