J'ai un dossier plein de très gros fichiers qui ont besoin d'être inversé par une puissance de 4. Donc, essentiellement, je dois lire les fichiers comme un binaire, ajuster la séquence de bits, puis écrire un nouveau binaire fichier avec les bits ajustés.Python - moyen efficace de retourner des octets dans un fichier?
Essentiellement, ce que je suis en train de faire est de lire une chaîne hexagonale hexString
qui ressemble à ceci: « 00112233AABBCCDD »
et écrire un fichier qui ressemble à ceci: « 33221100DDCCBBAA »
(c'est à dire que chaque deux caractères est un octet, et j'ai besoin de retourner les octets par une puissance de 4)
Je suis très novice en python et en codage en général, et la façon dont j'effectue actuellement cette tâche est extrêmement inefficace. Mon code ressemble actuellement à ceci:
import binascii
with open(myFile, 'rb') as f:
content = f.read()
hexString = str(binascii.hexlify(content))
flippedBytes = ""
inc = 0
while inc < len(hexString):
flippedBytes += file[inc + 6:inc + 8]
flippedBytes += file[inc + 4:inc + 6]
flippedBytes += file[inc + 2:inc + 4]
flippedBytes += file[inc:inc + 2]
inc += 8
..... write the flippedBytes to file, etc
Le code que je collais ci-dessus avec précision ce que j'accomplit besoin (note, mon code réel a quelques lignes supplémentaires de: « hexString.replace() » pour supprimer les caractères hexadécimaux inutiles - mais j'ai laissé ceux dehors pour rendre le au-dessus plus facile à lire). Mon problème ultime est que cela prend EXTRÊMEMENT longtemps pour exécuter mon code avec des fichiers plus volumineux. Certains de mes fichiers que j'ai besoin de retourner ont une taille de presque 2 Go, et le code allait prendre presque une demi-journée pour compléter un seul fichier. J'ai des dizaines de fichiers dont j'ai besoin pour exécuter cette tâche, de sorte que le calendrier n'est tout simplement pas pratique.
Existe-t-il un moyen plus efficace de retourner les valeurs HEX dans un fichier avec une puissance de 4?
.... pour ce que ça vaut, il y a un outil appelé WinHEX qui peut le faire manuellement, et ne prend qu'une minute au maximum pour retourner le fichier entier .... J'espérais juste automatiser cela avec python Nous n'avons pas eu à utiliser manuellement WinHEX à chaque fois
Alors ... vous voulez changer l'endianess des nombres 32bit? – kay
Donc, vous voulez convertir vos entiers binaires de 4 octets de little-endian à big-endian ou vice-versa? Vous devriez utiliser ['struct'] (https://docs.python.org/3/library/struct.html). –
Copie possible de [python décompresser little endian] (https://stackoverflow.com/questions/12163549/python-unpack-little-endian) –