Python Bitstream реализации

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

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

4 ответа

Решение

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

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

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

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

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

Нет, насколько я знаю, в стандартной библиотеке нет ничего, что помогло бы вам с выравниванием битов. 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

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

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

Другие вопросы по тегам