Реализации битового потока 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
вы поняли идею...