题
我的问题很简单:
有什么方法可以用 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 对十六进制;如果没有,只需更改它 32
到 16
或者无论它是什么......)
如果两个参数 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')
. 不隶属于 StackOverflow