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

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

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

8
задан Danielb 15 March 2010 в 20:22
поделиться

3 ответа

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

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

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

10
ответ дан 5 December 2019 в 12:57
поделиться

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

1
ответ дан 5 December 2019 в 12:57
поделиться

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

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

1
ответ дан 5 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: