Modo Pythic to Hex Dump Files
Domanda
La mia domanda è semplice:
C'è un modo per il codice in modo pytonico che comando bash?
hexdump -e '2/1 "%02x"' file.dat
.
Ovviamente, senza usare il sistema operativo, il PAPEN o qualsiasi collegamento;)
Modifica: Anche se non ho esplicitamente specificato, sarebbe bello se il codice era funzionale in Python3.x
Grazie!
Soluzione
Se ti interessa solo Python 2.x, line.encode('hex')
codificherà un pezzo di dati binari in HEX. Quindi:
with open('file.dat', 'rb') as f:
for chunk in iter(lambda: f.read(32), b''):
print chunk.encode('hex')
.
se il doppio argomento iter
sembra sconcertante, Fai clic sul collegamento della guida; Non è troppo complicato una volta che hai l'idea.
Se ti interessa Python 3.x, encode
Funziona solo per codec che convertono stringhe Unicode in byte; Eventuali codec che convertono l'altro modo (o qualsiasi altra combinazione), devi usare codecs.encode
per farlo esplicitamente:
with open('file.dat', 'rb') as f:
for chunk in iter(lambda: f.read(32), b''):
print(codecs.encode(chunk, 'hex'))
.
o potrebbe essere migliore da usare hexlify
: < / P >.
with open('file.dat', 'rb') as f:
for chunk in iter(lambda: f.read(32), b''):
print(binascii.hexlify(chunk))
.
Se vuoi fare qualcosa oltre a stamparli, piuttosto che leggere l'intero file in memoria, probabilmente si desidera creare un iteratore. Puoi semplicemente inserire questo in una funzione e modificare quel print
a un yield
e quella funzione restituisce esattamente l'iteratore che desideri. O utilizzare una chiamata GenexPR o map
:
with open('file.dat', 'rb') as f:
chunks = iter(lambda: f.read(32), b'')
hexlines = map(binascii.hexlify, chunks)
. Altri suggerimenti
La biblioteca standard è il tuo amico.Prova binascii.Hexlify () .
semplicemente read()
L'intero filee encode('hex')
.Cosa potrebbe essere più Pythic?
with open('file.dat', 'rb') as f:
hex_content = f.read().encode('hex')
.