我在Python中编写huffman实现作为学习练习。我已经将我的可变长度霍夫曼代码写入缓冲区(或文件)。只是发现似乎没有Python实现的比特流类!我查看过array和struct模块,但如果没有额外的工作,它们似乎无法满足我的需求。
有点令人眼花缭乱的this比特流实现,这更像是我想要的。 Python标准库中确实没有类似的比特流类吗?
答案 0 :(得分:9)
你是对的,标准库中没有任何东西,但是你试过bitstring模块吗?它几乎是为这种应用而设计的,稳定且well documented,所以我认为它应该适合你的需求。
构造,阅读,切片等都是按位完成的,它是纯Python。我在过去看到过很成功的哈夫曼编码示例。
另一个不错的选择是bitarray,它没有那么多功能但可以快得多,因为它是C扩展。作为奖励,它有一个霍夫曼编码示例作为源包的一部分分发。
答案 1 :(得分:1)
正确。 stdlib中需要比特流的大多数模块都是用C语言编写的,其中隐藏了详细信息。
答案 2 :(得分:1)
不,据我所知,标准库中没有任何内容可以帮助您进行位对齐操作。 Python不是为了摆弄小东西而设计的^^ ...
但是你可以在字节数组的帮助下轻松编写自己的比特流编写器:
>>> from array import array
>>> a = array("B")
>>> a.append(1) # 128
>>> a.append(0)
>>> a.append(0)
>>> a.append(0)
>>> a.append(1) # 8
>>> a.append(1) # 4
>>> a.append(1) # 2
>>> a.append(1) # 1
>>> print reduce(lambda m, n: (m << 1) + n, a, 0)
143
你明白了......
答案 3 :(得分:1)
我可能有点迟到了,但是有这个比特流库: