10

我正在用 Python 编写一个霍夫曼实现作为学习练习。我已经到了将我的可变长度霍夫曼代码写入缓冲区(或文件)的地步。才发现好像没有Python实现的bitstream类!我已经查看了数组结构模块,但如果没有额外的工作,它们似乎无法满足我的需求。

这个比特流实现有点眼花缭乱,这更像我想要的。Python标准库中真的没有可比的比特流类吗?

4

4 回答 4

13

你是对的,标准库中什么都没有,但是你尝试过bitstring模块吗?它几乎是为这种应用程序设计的,稳定且有据可查,所以我认为它应该适合您的需求。

构造、读取、切片等都是按位完成的,而且是纯Python。过去,我已经看到 Huffman 编码示例非常成功。

另一个不错的选择是bitarray,它没有那么多的功能,但可以相当快,因为​​它是一个 C 扩展。作为奖励,它有一个 Huffman 编码示例作为源包的一部分分发。

于 2010-03-15T21:49:28.273 回答
1

正确的。标准库中需要比特流的大多数模块都是用 C 语言编写的,并且隐藏了细节。

于 2010-03-15T20:25:59.240 回答
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

你明白了……

于 2010-03-15T20:35:17.487 回答
1

我参加聚会可能有点晚了,但是有这个比特流库:

https://pypi.python.org/pypi/bitstream/2.0.3

于 2015-05-29T14:40:08.867 回答