Реализации битового потока Python

Я пишу Хаффман реализация в Python в качестве упражнения. Я дошел до того, что записал свои коды Хаффмана переменной длины в буфер (или файл). Только найти там, похоже, нет класса bitstream, реализованного Python! Я взглянул на массив и struct модули, но они, кажется, не делать то, что мне нужно, без дополнительной работы.

немного вытаращилсяэтой потоке реализация, которая больше похожа на то, чего я хочу. Действительно ли в стандартной библиотеке Python нет сопоставимого класса bitstream?

4 ответов


вы правы, что в стандартной библиотеке ничего нет, но вы пробовали bitstring модуль? Он в значительной степени предназначен для такого рода приложений, является стабильным и хорошо документированы, поэтому я думаю, что это должно удовлетворить ваши потребности.

конструкция, чтение, отрезать, etc. все сделано побитово, и это чистый Python. Я видел примеры кодирования Хаффмана, сделанные с ним довольно успешно в прошлом.

еще один хороший вариант bitarray, который не имеет столько функций, но может быть значительно быстрее, поскольку это расширение C. В качестве бонуса он имеет пример кодирования Huffman, распространяемый как часть исходного пакета.


правильно. Большинство модулей в stdlib, которые нуждаются в bitstreaming, написаны на C, а детали скрыты.


нет, насколько я знаю, в стандартной библиотеке нет ничего, что поможет вам с Бит-выровненными операциями. Python не предназначен для игры с мелкими вещами ^^...

но вы можете легко написать свой собственный bitstream-writer с помощью байтовых массивов:

>>> 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

вы поняли идею...


Я, возможно, немного опоздал на вечеринку, но есть эта библиотека bitstream:

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