2016-12-08 4 views
0

Возможно ли использовать mmap только часть файла с использованием Python/mmap?mmap со смещением и длиной отображает весь файл

Я делаю это так:

fn_from = 'test20mil.dat' 
print os.stat(fn_from).st_size 
8896332925 
f2= open(fn_from, 'r+') 
mm = mmap.mmap(f2.fileno(), 40, access=mmap.ACCESS_COPY, offset=2*mmap.ALLOCATIONGRANULARITY) 

Должен mm размер будет 40?

print mm.size() 
8896332925 

Затем, когда я прочитал данные, которые он проходит границу без ошибок

while True: 
    b= mm.read(256*1024) 
    if not b: break; 

Что точка length тогда?

+0

Что это означает, зависит от операционной системы, которую вы используете в соответствии с [documentaiton] (https://docs.python.org/3/library/mmap.html#module-mmap). Существуют разные версии Windows и Unix. В любом случае для любого значения, отличного от нуля, отображается весь файл. Это должно быть проблемой, потому что только часть (-ы), на которую ссылаются, будут перенесены в память - вот и все, не так ли? – martineau

+0

@martineau В документации для Unix и Windows указано, что отображаются только байты длины, а в Linux я могу подтвердить, что это происходит на самом деле. –

+0

@olekb метод 'read()' возвращает _up to_ количество байтов, которое вы скажете, чтобы читать. если отображается только 40 байт, но вы просите прочитать 256k, будут возвращены только четыре байта. Это не ошибка, и в соответствии с тем, как работает 'read()' на файловых объектах вообще. –

ответ