Domanda

Sto scrivendo un Huffman implementazione in Python come un esercizio di apprendimento. Ho ottenuto al punto di scrivere le mie lunghezza variabile codici di Huffman in un buffer (o file). Solo per trovare lì non sembra essere una classe bitstream implementata da Python! Ho avuto uno sguardo alla e moduli struct, ma non sembrano fare quello che mi serve, senza lavoro extra.

Un po 'di goggling alzato questa implementazione bitstream, che è più simile a quello che sono voler. Non c'è proprio nessuna classe bitstream paragonabile nella libreria standard di Python?

È stato utile?

Soluzione

Hai ragione che non c'è niente nella libreria standard, ma avete provato il bitstring modulo? È praticamente progettato per questo tipo di applicazione, è stabile e ben documentato , quindi penso che dovrebbe adattarsi le vostre esigenze.

Edilizia, la lettura, affettare, ecc sono tutti fatti bit a bit, ed è puro Python. Ho visto codifica di Huffman esempi realizzati con esso con successo in passato.

Un'altra buona opzione è BitArray , che non ha molte caratteristiche, ma può essere notevolmente più veloce in quanto è un estensione C. Come bonus è un esempio di codifica di Huffman distribuito come parte del pacchetto sorgente.

Altri suggerimenti

Una corretta. La maggior parte dei moduli nella stdlib che hanno bisogno di bitstreaming sono scritti in C, con i dettagli nascosti.

No, per quanto ne so non c'è nulla nella libreria standard che ti aiuta con le operazioni bit-allineati. Python non è progettato per giocherellare con le piccole cose ^^ ...

Ma si potrebbe facilmente scrivere il proprio flusso di bit-scrittore con l'aiuto di array di byte:

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

Si ottiene l'idea ...

Sono forse un po 'tardi alla festa, ma c'è questa libreria bitstream:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top