2012-06-29 2 views

ответ

3

Вот как я смог упаковать двоичные данные непосредственно в файл под Python 3. Единственным недостатком является то, что вам нужно угадать максимальный размер файла перед записью данных. (Дополнительный вызов truncate можно сделать в конце, если догадка слишком велика.)

Здесь две вещи. Файл сопоставляется с памятью, а struct используется для упаковки данных в memoryview этой карты памяти. Используя memoryview, можно использовать интерфейс буфера Python для записи непосредственно в файл. structpack_into Функция может записывать во все, что поддерживает буферный интерфейс. Этот метод также можно использовать, используя memoryview в сокете, чтобы записывать двоичные данные непосредственно в сокет.

import struct 
import mmap 

with open('test.bin', 'wb') as f: 
    f.truncate(100) 

with open('test.bin', 'r+b') as f: 
    m = mmap.mmap(f.fileno(), 0) 
    mv = memoryview(m) 
    for ind in range(25): 
     struct.pack_into('>l', mv, ind * 4, ind) 

Кроме того, обратите внимание, что это, вероятно, лучше сделать меньше звонков в pack_into, и назвав его в петлю здесь только для иллюстративных целей.

Смежные вопросы