Как вставить данные в середину большого файла, который не помещается в оперативку?

На собеседовании задели вопрос:

Как вставить данные в середину большого файла, который не помещается в оперативку ( например 100 гб )?


Ответы (2 шт):

Автор решения: Zhihar

есть команда seek во многих языках, чтобы писать/считывать из нужного места файла:

в питоне она тоже есть

https://pythonz.net/references/named/file.seek/

кроме того всегда можно решить задачу в лоб и начать считывать файл по частям, записывать по частям, потом записать в нужную часть данные, записать, и дальше опять считывать и записывать файл по частям

но это все таки костылинг, когда есть стандартные функции

→ Ссылка
Автор решения: MaxU

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

Если файл бинарный, то вместо строк читать можно по кускам указав сколько байт мы хотим прочитать за раз:

with open(file, 'rb') as f:
    while True:
        chunk = f.read(1024)  
        if not chunk:
            break
        # process the chunk of data here

Размер куска нужно подобрать так, чтобы место вставки находилось ровно между двумя кусками, а не посередине одного куска данных...

→ Ссылка