Я пишу реализацию Хаффмана в Python как осуществление изучения. Я имею на грани выписывания моих кодов Хаффмана переменной длины к буферу (или файл). Только для нахождения, кажется, нет класса битового потока, реализованного Python! Я взглянул на массив и модули структуры, но они, кажется, не делают то, в чем я нуждаюсь без дополнительной работы.
Немного таращащее глаза поднял эту реализацию битового потока, которая больше похожа на то, что я желаю. Нет ли в библиотеке стандарта Python действительно никакой сопоставимый класс битового потока?
Вы правы, что в стандартной библиотеке ничего нет, но пробовали ли вы модуль bitstring ? Он в значительной степени разработан для такого рода приложений, стабилен и хорошо документирован , поэтому я думаю, что он должен соответствовать вашим потребностям.
Построение, чтение, нарезка и т. Д. Выполняются поразрядно, и это чистый Python. Я видел примеры кодирования Хаффмана, выполненные с его помощью довольно успешно в прошлом.
Другой хороший вариант - битовый массив , который не имеет такого количества функций, но может быть значительно быстрее, чем расширение C. В качестве бонуса он имеет пример кодирования Хаффмана, распространяемый как часть исходного пакета.
Верно. Большинство модулей в stdlib, которым требуется потоковая передача битов, написаны на 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
Вы поняли идею...