Pregunta

Estoy escribiendo un huffman Implementación en Python como ejercicio de aprendizaje. He llegado al punto de escribir mis códigos de Huffman de longitud variable a un búfer (o archivo). ¡Solo para encontrar no parece haber una clase de flujo de bits implementada por Python! He echado un vistazo al formación y estructura Módulos, pero no parecen hacer lo que necesito sin trabajo adicional.

Un poco de goggling apareció este Implementación de BitStream, que es más como lo que estoy deseando. ¿Realmente no hay una clase BitStream comparable en la biblioteca estándar de Python?

¿Fue útil?

Solución

Tienes razón en que no hay nada en la biblioteca estándar, pero ¿has probado el bitstring ¿módulo? Está bastante diseñado para este tipo de aplicación, es estable y bien documentada, así que creo que debería adaptarse a sus necesidades.

La construcción, la lectura, el corte, etc. se realizan a bit a bit, y es pura pitón. He visto ejemplos de codificación de Huffman realizados con él con bastante éxito en el pasado.

Otra buena opción es bitray, que no tiene tantas características, pero puede ser considerablemente más rápido, ya que es una extensión C. Como bono, tiene un ejemplo de codificación de Huffman distribuido como parte del paquete fuente.

Otros consejos

Correcto. La mayoría de los módulos en el stdlib que necesitan bitsreaming están escritos en C, con los detalles ocultos.

No, hasta donde sé, no hay nada en la biblioteca estándar que te ayude con las operaciones alineadas de bits. Python no está diseñado para jugar con las cosas pequeñas ^^ ...

Pero podría escribir fácilmente su propio bitstream-escritor con la ayuda de matrices de bytes:

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

Entiendes la idea ...

Quizás llego un poco tarde a la fiesta, pero hay esta biblioteca de la corriente de bits:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top