Python位流实现

2024-09-28 17:29:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python编写一个huffman实现作为学习练习。我已经到了把可变长度的哈夫曼代码写到缓冲区(或文件)的地步。只发现似乎没有一个由Python实现的位流类!我看了一下arraystruct模块,但是它们似乎不需要额外的工作就可以完成我需要的工作。

有点眼花缭乱地打开了this比特流实现,这更像是我想要的。python标准库中真的没有可比的bitstream类吗?


Tags: 模块文件代码标准thisarraystruct缓冲区
3条回答

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

不,据我所知,标准库中没有任何东西可以帮助您进行位对齐操作。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

你明白了。。。

你说的对,标准库中什么都没有,但是你试过bitstring模块吗?它基本上是为这种应用程序设计的,是稳定的,well documented,所以我认为它应该适合您的需要。

构造、读取、切片等都是按位完成的,这是纯Python。我以前见过哈夫曼用它编写代码的例子非常成功。

另一个好的选择是bitarray,它没有那么多功能,但是可以比C扩展快得多。作为奖励,它有一个哈夫曼编码示例作为源包的一部分分发。

相关问题 更多 >