У меня есть некоторый код, который питон:Дать двоичный буфер в файл в Python
- принимает BLOB из базы данных, которая сжимается.
- Вызывает процедуру сжатия в C, которая распаковывает данные.
- Записывает несжатые данные в файл.
Он использует ctypes для вызова подпрограммы C, которая находится в общей библиотеке.
Это в основном работает, за исключением фактического написания файла. Для того, чтобы распаковывать, я получаю несжатые данные в буфер питона, созданные с использованием ctypes create_string_buffer
метода:
c_uncompData_p = create_string_buffer(64000)
поэтому вызов распаковки выглядит так:
c_uncompSize = mylib.explodeCharBuffer (c_data_p, c_data_len, c_uncompData_p)
Размер полученные несжатые данные возвращаются как возвращаемое значение.
... Но я понятия не имею, как заставить питона на писать только c_uncompSize
байт из - если я:
myfile.write (c_uncompData_p.raw)
записывает весь 64k буфер из (данные двоичного кода - так он не завершается нулем).
Итак, мой вопрос заключается в использовании Python 2.5, как мне получить распечатку байтов c_uncompSize, а не всего 64k?
Благодаря Джейми
нарезая работает, но я подозреваю, что он создает копию данных. Это может быть или не быть важно (64K - относительно небольшое число). – jfs
Нарезка работала хорошо и хорошо работает. Благодаря! –
Можно использовать 'itertools.islice()', чтобы избежать копирования данных, – martineau