Скажите, что у меня есть двоичный файл 12 ГБ, и я хочу нарезать 8 ГБ из середины его. Я знаю индексы положения, между которыми я хочу сократить.
Как я делаю это? Очевидно, 12 ГБ не впишутся в память, это прекрасно, но 8 ГБ не будут также... То, которое я думал, было прекрасно, но это кажется двоичным, кажется, не любит его, если Вы делаете это в блоках! Я добавлял 10 МБ за один раз к новому двоичному файлу и существуют разрывы на краях каждого блока 10 МБ в новом файле.
Существует ли Pythonic способ сделать это легко?
Вот быстрый пример. При необходимости скорректируйте:
def copypart(src,dest,start,length,bufsize=1024*1024):
with open(src,'rb') as f1:
f1.seek(start)
with open(dest,'wb') as f2:
while length:
chunk = min(bufsize,length)
data = f1.read(chunk)
f2.write(data)
length -= chunk
if __name__ == '__main__':
GIG = 2**30
copypart('test.bin','test2.bin',1*GIG,8*GIG)