Ich habe einen Ordner voller sehr große Dateien, die mit einer Potenz von 4 Byte gewendet werden müssen. Also im Wesentlichen muss ich die Dateien als Binär lesen, die Reihenfolge der Bits anpassen und dann eine neue Binärdatei schreiben Datei mit den Bits angepasst.Python - Effiziente Möglichkeit, Bytes in einer Datei umzukehren?
Im Grunde, was ich versuche einen Hex-String hexString
zu tun ist, lesen, die wie folgt aussieht: „00112233AABBCCDD“
Und eine Datei schreiben, die wie folgt aussieht: „33221100DDCCBBAA“
(dh alle zwei Zeichen ist ein Byte, und ich muss die Bytes mit einer Potenz von 4 umdrehen)
Ich bin sehr neu zu Python und Codierung im Allgemeinen, und die Art und Weise, die ich derzeit diese Aufgabe ausführen ist äußerst ineffizient. Mein Code sieht derzeit wie folgt aus:
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
Der Code, den ich oben genau eingefügt erreicht, was ich brauche (beachten Sie, meine eigentliche Code hat ein paar zusätzliche Zeilen: „hexString.replace()“ unnötige Hex-Zeichen entfernen - aber ich habe diese weggelassen, um das Obenstehende leichter lesbar zu machen). Mein ultimatives Problem ist, dass es EXTREM dauert, meinen Code mit größeren Dateien auszuführen. Einige meiner Dateien, die ich umdrehen muss, sind fast 2 GB groß, und der Code würde fast einen halben Tag benötigen, um eine einzelne Datei zu vervollständigen. Ich habe Dutzende von Dateien, die ich ausführen muss, so dass Zeitrahmen einfach nicht praktikabel ist.
Gibt es eine effizientere Möglichkeit, die HEX-Werte in einer Datei mit einer Potenz von 4 zu spiegeln?
... für das, was es wert ist, gibt es ein Tool namens WinHEX, das kann manuell tun, und dauert nur eine Minute max, um die ganze Datei zu spiegeln .... Ich hatte nur gehofft, dies mit Python zu automatisieren Wir mussten WinHEX nicht jedes Mal manuell verwenden
Also ... willst du die Endlichkeit von 32-Bit-Nummern ändern? – kay
Also möchten Sie Ihre binären 4-Byte-Ganzzahlen von Little-Endian zu Big-Endian oder umgekehrt konvertieren? Sie sollten ['struct'] (https://docs.python.org/3/library/struct.html) verwenden. –
Mögliches Duplikat von [python entpacke Little Endian] (https://stackoverflow.com/questions/12163549/python-unpack-little-endian) –