target_chain = '1020414646canBeFollowedBySpaces 3292532113435532419963'
to_add = '01846372998'
with open('zaza.txt','rb+') as f:
ch = f.read()
x = ch.find(target_chain)
f.seek(x + len(target_chain),0)
f.write(to_add)
f.write(ch[x + len(target_chain):])
В этом методе абсолютно обязательно открыть файл в двоичном режиме 'b' по какой-то причине, связанной с обработкой конца строк в Python (см. Universal Newline, включен по умолчанию))
Режим 'r +' разрешает запись и чтение
. В этом методе то, что находится до target_chain в файле, остается неизменным.И то, что после target_chain сдвигается вперед.Как сказал Грег Хьюгилл, на жестком диске невозможно раздвинуть биты, чтобы вставить новые биты посередине.
Очевидно, что если файл очень большой, все его содержимое читается в ch может занимать слишком много памяти, и алгоритм должен быть изменен: чтение строки за строкой до строки, содержащей target_chain, а затем чтение следующей строки перед вставкой, а затем продолжение «чтения следующей строки - повторно- писать в текущей строке "до конца файла, чтобы постепенно сдвигать содержимое из строки, связанной с добавлением.
Вы понимаете, что я имею в виду ...