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!

È stato utile?

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')
.

(IIRC, hexdump per impostazione predefinita Stampa 32 coppie di esagono per riga; In caso contrario, basta cambiare quella 32 a 16 o qualsiasi altra cosa sia ...)

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')
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top