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
тогда?
Что это означает, зависит от операционной системы, которую вы используете в соответствии с [documentaiton] (https://docs.python.org/3/library/mmap.html#module-mmap). Существуют разные версии Windows и Unix. В любом случае для любого значения, отличного от нуля, отображается весь файл. Это должно быть проблемой, потому что только часть (-ы), на которую ссылаются, будут перенесены в память - вот и все, не так ли? – martineau
@martineau В документации для Unix и Windows указано, что отображаются только байты длины, а в Linux я могу подтвердить, что это происходит на самом деле. –
@olekb метод 'read()' возвращает _up to_ количество байтов, которое вы скажете, чтобы читать. если отображается только 40 байт, но вы просите прочитать 256k, будут возвращены только четыре байта. Это не ошибка, и в соответствии с тем, как работает 'read()' на файловых объектах вообще. –