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
risposta
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.
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
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).
Quale versione di python stai usando? Ho giocato un po 'con le strutture ma non l'ho mai visto prima. – chrism1
Sto usando Python 2.6.4 – mdm