вставка строки в большой файл - PullRequest
6 голосов
/ 20 июня 2011

У меня большой файл (несколько ГБ) с текстом.

Например, он имеет следующий текст:

Hello, World!

Мне нужно вставить слово «забавный» на 5 позиций и сместить остальную часть текста:

Hello, funny World!

Как я не могу прочитать весь файл для смещения остальных? Или как я могу оптимизировать эту операцию?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 20 июня 2011

Вы не можете.Простые текстовые файлы не могут быть сокращены или расширены в начале или середине файла, но только в конце.

1 голос
/ 20 июня 2011

Ну, вы не можете, пожалуйста, смотрите это для получения дополнительной информации Как изменить текстовый файл в Python?

0 голосов
/ 20 июня 2011

Если ваш файл составляет несколько гигабайт, то, вероятно, мое решение будет применяться только к 64-битным операционным системам:

from __future__ import with_statement

import mmap, os

def insert_string(fp, offset, some_bytes):
    # fp is assumedly open for read and write
    fp.seek(0, os.SEEK_END)
    # now append len(some_bytes) dummy bytes
    fp.write(some_bytes) # some_bytes happens to have the right len :)
    fp.flush()
    file_length= fp.tell()

    mm= mmap.mmap(fp.fileno(), file_length)
    # how many bytes do we have to shift?
    bytes_to_shift= file_length - offset - len(some_bytes)
    # now shift them
    mm.move(offset + len(some_bytes), offset, bytes_to_shift)
    # and replace the contents at offset
    mm[offset:offset+len(some_bytes)]= some_bytes
    mm.close()

if __name__ == "__main__":
    # create the sample file
    with open("test.txt", "w") as fp:
        fp.write("Hello, World!")
    # now operate on it
    with open("test.txt", "r+b") as fp:
        insert_string(fp, 6, " funny")

Примечание: это программа на Python 2 для Linux.YMMV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...