ho qualche codice Python che:Scrivi buffer binario in un file in python
- prende un BLOB da un database che viene compressa.
- Chiama una routine di compressione in C che decomprime i dati.
- Scrive i dati non compressi in un file.
Utilizza ctypes per chiamare la routine C, che si trova in una libreria condivisa.
Questo funziona principalmente, ad eccezione della scrittura effettiva nel file. Per decomprimere, ottengo i dati non compressi in un buffer di pitone, creato utilizzando le ctypes create_string_buffer
metodo:
c_uncompData_p = create_string_buffer(64000)
quindi la chiamata di decompressione è come questo:
c_uncompSize = mylib.explodeCharBuffer (c_data_p, c_data_len, c_uncompData_p)
La dimensione del i dati non compressi risultanti vengono restituiti come valore di ritorno.
Ma ... non ho idea di come forzare pitone su un solo scrivere c_uncompSize
byte fuori - se faccio:
myfile.write (c_uncompData_p.raw)
scrive l'intero 64k tampone out (i dati sono binari - così non è terminato con null).
Quindi, la mia domanda è: usare Python 2.5 come faccio a stampare i byte c_uncompSize anziché l'intero 64k?
Grazie Jamie
lavori di tranciatura, ma ho il sospetto che crea una copia dei dati. Potrebbe o potrebbe non essere importante (64 K è un numero relativamente piccolo). – jfs
La slicing ha funzionato bene e funziona bene. Grazie! –
Si potrebbe usare 'itertools.islice()' per evitare di fare una copia dei dati, – martineau