2009-11-14 8 views
9

In Python sto accedendo a un file binario leggendolo in una stringa e utilizzando quindi struct.unpack(...). Ora voglio scrivere su quella stringa usando struct.pack_into(...), ma ottengo l'errore "Impossibile utilizzare la stringa come buffer modificabile". Quale sarebbe un buffer adatto per l'uso con il modulo struct?Che cosa è un buffer adatto per il modulo struct di Python

+0

Quale versione di python stai usando? Ho giocato un po 'con le strutture ma non l'ho mai visto prima. – chrism1

+0

Sto usando Python 2.6.4 – mdm

risposta

6

Se non si sta tentando di comprimerlo in un oggetto specifico, è sufficiente utilizzare struct.pack per restituire una stringa.

Altrimenti, ctypes.create_string_buffer è un modo per ottenere un buffer mutabile.

+0

Il buffer è la memoria di una semplice macchina virtuale, quindi ho bisogno di comprimere un oggetto specifico. La memoria è piccola ma copiare 128-512k per un singolo accesso di memoria non è un'opzione. – mdm

6

Come indicato in un'altra risposta, struct_pack è probabilmente tutto ciò che serve e deve essere utilizzato. Tuttavia, oggetti di tipo array supportano il protocollo buffer e possono essere modificate:

>>> import array, struct 
>>> a = array.array('c', ' ' * 1000) 
>>> c = 'a'; i = 1 
>>> struct.pack_into('ci', a, -0, c, i) 
>>> a 
array('c', 'a\x00\x00\x00\x01\x00\x00\x00 ... 

Il protocollo buffer originale era un po 'di hack principalmente per estensioni C. È stato deprecato e sostituito da un new C-level buffer API and memoryview objects in Python 3 (e nel prossimo 2.7).

-1

Due possibilità saltano subito in mente:

  • È possibile utilizzare il modulo Python stringio di fare una lettura/scrittura buffer con la semantica di file.

  • È possibile utilizzare il modulo Python array per ottenere un buffer da trattare come un elenco, ma che conterrà solo byte binari.

Problemi correlati