Question

Je suis en train d'écrire un huffman mise en œuvre en Python comme un exercice d'apprentissage. J'ai au point d'écrire mes codes de longueur variable huffman à un tampon (ou un fichier). ne semble pas seulement pour y trouver à une classe bitstream mis en œuvre par Python! J'ai eu un coup d'oeil à la et struct modules mais ils ne semblent pas faire ce que je dois sans travail supplémentaire.

Un peu de goggling tournées vers le haut cette mise en œuvre bitstream, qui est plus comme ce que Je suis désireux. Est-il vraiment pas de classe bitstream comparable dans la bibliothèque standard de Python?

Était-ce utile?

La solution

Vous avez raison qu'il n'y a rien dans la bibliothèque standard, mais avez-vous essayé le bitstring module? Il est à peu près conçu pour ce genre d'application, est stable et bien documenté , donc je pense qu'il devrait convenir vos besoins.

Construction, lecture, découpage, etc. sont tous fait au niveau du bit, et il est pur Python. J'ai vu des exemples de codage de Huffman fait avec elle tout à fait avec succès dans le passé.

Une autre bonne option est BitArray , qui n'a pas autant de fonctionnalités, mais peut être beaucoup plus rapide car il est une extension C. En prime, il a un exemple de codage de Huffman distribués dans le cadre du paquet source.

Autres conseils

Correct. La plupart des modules du stdlib qui ont besoin bitstreaming sont écrits en C, avec les détails cachés.

Non, autant que je sache il n'y a rien dans la bibliothèque standard qui vous aide à des opérations alignées bit. Python est pas conçu pour jouer avec les petites choses ^^ ...

Mais vous pouvez facilement écrire votre propre bitstream-écrivain avec l'aide de tableaux d'octets:

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

Vous avez l'idée ...

Je suis peut-être un peu en retard à la fête, mais il y a cette bibliothèque bitstream:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top