我想显示转换为二进制文件的文件,如二进制编辑器。
例如,它将PNG转换为89 50 4E 47 0D 0A 1A 0A 00 00 00 ....
f = open(path, "r")
print f.read() # I want to convert this to binary
f.close()
请建议我。
答案 0 :(得分:5)
以十六进制表示形式获取二进制文件:
bin_data = open(path, 'rb').read()
hex_data = bin_data.encode('hex')
如果path
引用了PNG文件,则bin_data
的前几个字节将显示为\x89PNG\r\n
,而hex_data
的开头将显示为89504e470d0a
}。要很好地格式化,请添加空格:
import re
hex_with_spaces = re.sub('(..)', r'\1 ', hex_data)
hex_with_spaces
的相应前几个字节看起来像89 50 4e 47 0d 0a
。
答案 1 :(得分:1)
要同时支持Python 2和3,您可以使用binascii.hexlify()
代替.encode('hex')
:
#!/usr/bin/env python
"""Make a hexdump"""
import re
import sys
from binascii import hexlify
from functools import partial
def hexdump(filename, chunk_size=1<<15):
add_spaces = partial(re.compile(b'(..)').sub, br'\1 ')
write = getattr(sys.stdout, 'buffer', sys.stdout).write
with open(filename, 'rb') as file:
for chunk in iter(partial(file.read, chunk_size), b''):
write(add_spaces(hexlify(chunk)))
hexdump(sys.argv[1])
注意:文件以二进制模式打开,以避免因为'\r\n' -> '\n'
等文本文件启用换行转换而损坏数据。