Python位流实现

13 投票
4 回答
11397 浏览
提问于 2025-04-15 20:27

我正在用Python写一个哈夫曼编码的实现,作为学习练习。我已经写到了将我的可变长度哈夫曼编码输出到一个缓冲区(或者文件)的阶段。结果发现,Python似乎没有实现一个比特流类!我查看了arraystruct模块,但它们似乎没有我需要的功能,还需要额外的工作。

我稍微搜索了一下,找到了这个比特流实现,它更接近我想要的。难道在Python的标准库中真的没有类似的比特流类吗?

4 个回答

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

你明白这个意思了吧...

2

我可能来得有点晚,但这里有一个叫做bitstream的库:

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

17

你说得对,标准库里确实没有这个功能,不过你试过bitstring模块吗?这个模块基本上就是为这种应用设计的,稳定性很好,而且文档也很详细,所以我觉得它应该能满足你的需求。

它的构建、读取、切片等等操作都是按位进行的,而且完全是用Python写的。我之前见过用它成功实现霍夫曼编码的例子。

另一个不错的选择是bitarray,虽然功能没有那么多,但因为它是C语言扩展,所以速度可以快很多。而且作为额外的好处,它的源代码包里还包含了一个霍夫曼编码的例子。

撰写回答