Frage

Ich schreibe a Huffman Implementierung in Python als Lernübung. Ich habe den Punkt des Schreibens meiner Huffman -Codes mit variabler Länge in einen Puffer (oder eine Datei) erreicht. Nur um festzustellen, dass es keine von Python implementierte Bitstream -Klasse gibt! Ich habe mir das angesehen Array und Struktur Module, aber sie scheinen nicht ohne zusätzliche Arbeit zu tun, was ich brauche.

Ein bisschen Schützen tauchte auf Dies Bitstream -Implementierung, was eher dem ist, was ich will. Gibt es in der Python Standard Library wirklich keine vergleichbare Bitstream -Klasse?

War es hilfreich?

Lösung

Sie haben Recht, dass es in der Standardbibliothek nichts gibt, aber haben Sie das ausprobiert Bitstring Modul? Es ist ziemlich für diese Art von Anwendung konzipiert, ist stabil und gut dokumentiert, Ich denke, es sollte Ihren Bedürfnissen entsprechen.

Konstruktion, Lesen, Schneiden usw. sind bitweise durchgeführt und es ist reines Python. Ich habe Huffman Coding -Beispiele in der Vergangenheit ziemlich erfolgreich gemacht.

Eine weitere gute Option ist Bitarray, was nicht so viele Funktionen hat, aber erheblich schneller sein kann, da es sich um eine C -Erweiterung handelt. Als Bonus hat es ein Huffman -Codierungsbeispiel, das als Teil des Quellpakets verteilt wird.

Andere Tipps

Richtig. Die meisten Module in der STDLIB, die Bitstreaming benötigen, sind in C geschrieben, wobei die Details versteckt sind.

Nein, soweit ich weiß, dass es in der Standardbibliothek nichts gibt, hilft Ihnen bei bitter ausgerichteten Operationen. Python ist nicht so konzipiert, dass sie mit dem kleinen Zeug verwirkt ^^ ...

Sie könnten jedoch leicht Ihren eigenen Bitstream-Schriftsteller mit Hilfe von Byte-Arrays schreiben:

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

Du hast die Idee...

Ich bin vielleicht etwas spät zur Party, aber es gibt diese Bitstream -Bibliothek:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top