有没有办法以 Python 方式编码这个 Bash 命令?
hexdump -e '2/1 "%02x"' file.dat
显然,不使用
os.popen
或任何此类快捷方式;)
如果代码能在 Python3.x 中运行那就太好了
标准库是你的朋友。 尝试 binascii.hexlify()。
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
看起来令人困惑,请单击帮助链接;一旦你明白了,它就不会太复杂。
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)
read()
整个文件和encode('hex')
。还有什么比这更Pythonic 的吗?
with open('file.dat', 'rb') as f:
hex_content = f.read().encode('hex')