我的问题很简单:

有什么方法可以用 bash 命令以 Python 方式进行编码吗?

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

显然,不使用 os、popen 或任何快捷方式;)

编辑:虽然我没有明确指定,但如果代码能在 Python3.x 中运行那就太好了

谢谢!

有帮助吗?

解决方案

如果你只关心Python 2.x, line.encode('hex') 将把一大块二进制数据编码为十六进制。所以:

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

(IIRC, hexdump 默认情况下每行打印 32 对十六进制;如果没有,只需更改它 3216 或者无论它是什么......)

如果两个参数 iter 看起来很莫名其妙,请点击帮助链接;一旦你明白了这个想法,它就不会太复杂。

如果你关心 Python 3.x, encode 仅适用于将 Unicode 字符串转换为字节的编解码器;任何以相反方式转换的编解码器(或任何其他组合),您必须使用 codecs.encode 明确地做到这一点:

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

或者使用可能会更好 hexlify:

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

如果您除了打印出来之外还想做一些事情,而不是将整个文件读入内存,您可能需要创建一个迭代器。你可以把它放在一个函数中并改变它 print 到一个 yield, ,并且该函数准确地返回您想要的迭代器。或者使用geneexpr或 map 称呼:

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

其他提示

标准图书馆是您的朋友。尝试 binascii.hexlify()

简单地 read() 整个文件和 encode('hex') 。什么可能更加笨拙?

with open('file.dat', 'rb') as f:
    hex_content = f.read().encode('hex')
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top