Tengo algo de código Python que:Escribir un búfer binario en un archivo en Python
- Toma un BLOB de una base de datos que se comprime.
- Llama a una rutina de descompresión en C que descomprime los datos.
- Escribe los datos sin comprimir en un archivo.
Utiliza ctypes para llamar a la rutina C, que se encuentra en una biblioteca compartida.
Esto funciona principalmente, a excepción de la escritura real en el archivo. Para descomprimir, consigo los datos sin comprimir en un búfer pitón, creada usando los ctypes create_string_buffer
método:
c_uncompData_p = create_string_buffer(64000)
lo que la llamada descompresión es así:
c_uncompSize = mylib.explodeCharBuffer (c_data_p, c_data_len, c_uncompData_p)
El tamaño de la los datos sin comprimir resultantes se devuelven como el valor de retorno.
Pero ... no tienen idea de cómo forzar pitón en escribir solamente c_uncompSize
bytes - si lo hago:
myfile.write (c_uncompData_p.raw)
se escribe todo el búfer fuera de 64k (los datos son binarios - por lo no es nulo terminado).
Por lo tanto, mi pregunta es - usando Python 2.5 ¿cómo obtengo los bytes de c_uncompSize impresos, en lugar de los 64k completos?
Gracias Jamie
trabajos de cortado, pero sospecho que crea una copia de los datos. Puede o no ser importante (64K es un número relativamente pequeño). – jfs
El corte funcionaba bien y funciona bien. ¡Gracias! –
Se podría usar 'itertools.islice()' para evitar hacer una copia de los datos, – martineau