Frage

meine Frage ist einfach:

Gibt es eine Möglichkeit, diesen Bash-Befehl pythonisch zu codieren?

hexdump -e '2/1 "%02x"' file.dat

Offensichtlich ohne Verwendung von OS, Popen oder einer Verknüpfung ;)

BEARBEITEN:Obwohl ich es nicht explizit angegeben habe, wäre es großartig, wenn der Code in Python3.x funktionsfähig wäre

Danke!

War es hilfreich?

Lösung

Wenn Sie sich nur für Python 2.x interessieren, line.encode('hex') kodiert einen Teil der Binärdaten in Hex.Also:

with open('file.dat', 'rb') as f:
    for chunk in iter(lambda: f.read(32), b''):
        print chunk.encode('hex')

(IIRC, hexdump druckt standardmäßig 32 Hexadezimalpaare pro Zeile;Wenn nicht, ändern Sie das einfach 32 Zu 16 oder was auch immer es ist…)

Wenn das Zwei-Argument iter sieht verwirrend aus, klicken Sie auf den Hilfelink;Es ist nicht allzu kompliziert, wenn man erst einmal die Idee hat.

Wenn Sie sich für Python 3.x interessieren, encode Funktioniert nur für Codecs, die Unicode-Zeichenfolgen in Bytes konvertieren.Alle Codecs, die umgekehrt konvertieren (oder eine andere Kombination), müssen Sie verwenden codecs.encode um es explizit zu tun:

with open('file.dat', 'rb') as f:
    for chunk in iter(lambda: f.read(32), b''):
        print(codecs.encode(chunk, 'hex'))

Oder es ist vielleicht besser, es zu verwenden hexlify:

with open('file.dat', 'rb') as f:
    for chunk in iter(lambda: f.read(32), b''):
        print(binascii.hexlify(chunk))

Wenn Sie etwas anderes tun möchten, als sie auszudrucken, anstatt die gesamte Datei in den Speicher einzulesen, möchten Sie wahrscheinlich einen Iterator erstellen.Sie könnten dies einfach in eine Funktion einfügen und das ändern print zu einem yield, und diese Funktion gibt genau den gewünschten Iterator zurück.Oder verwenden Sie einen genexpr oder map Anruf:

with open('file.dat', 'rb') as f:
    chunks = iter(lambda: f.read(32), b'')
    hexlines = map(binascii.hexlify, chunks)

Andere Tipps

Die Standardbibliothek ist Ihr Freund.Probieren binascii.hexlify () .

einfach read() die gesamte Dateiund encode('hex') .Was könnte pythonischer sein?

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top