将ASCII二进制序列写入二进制python

时间:2014-08-08 22:02:41

标签: python binary compression ascii huffman-code

我正在实施Huffman算法,但是当我得到最终的压缩代码时,我得到了类似于下面的字符串:

10001111010010101010101

这是由我的树叶的路径创建的二进制代码。

我有这个序列,但是当我将它保存在文件中时,所有发生的事情都是系统将其保存为文件上的ASCII,我无法压缩,因为它与原始文件具有相同或更大的尺寸

如何直接保存此二进制文件?

PS:如果我使用某个函数将我的字符串转换为二进制,我得到的就是将我的ASCII转换为二进制,所以我什么也没做,我需要一个真正的解决方案。

2 个答案:

答案 0 :(得分:1)

你需要做的是取每8位并将其转换成一个字节来写出,循环直到剩下少于8位。然后将剩下的任何内容保存在前一个值的前面。

def binarize(bitstring):
    wholebytes = len(bitstring) // 8
    chars = [chr(int(bitstring[i*8:i*8+8], 2)) for i in range(wholebytes)]
    remainder = bitstring[wholebytes*8:]
    return ''.join(chars), remainder

答案 1 :(得分:0)

我认为您只希望int()的基值为2:

my_string = "10001111010010101010101"
code_num = int( my_string, 2 )

然后写入二进制文件。 struct.pack还允许你指定你喜欢的任何字节顺序。

myfile = open("filename.txt",'wb')
mybytes = struct.pack( 'i', code_num )
myfile.write(mybytes)
myfile.close()

此方法还会写入一些前导零,这可能会给您的霍夫曼代码带来麻烦。