将文件转换为二进制(生成hexdump)

时间:2014-03-17 05:49:06

标签: python

我想显示转换为二进制文件的文件,如二进制编辑器。

例如,它将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()

请建议我。

2 个答案:

答案 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'等文本文件启用换行转换而损坏数据。