Это, вероятно, не решит вашу точную проблему, так как вам нужно будет заранее знать точное количество байтов, которые вы добавите в начало файла.
# Put some text in the file
f = open("tmp.txt", "w")
print >>f, "123456789"
f.close()
# Open the file in read/write mode
f = open("tmp.txt", "r+")
f.seek(0) # reposition the file pointer to the beginning of the file
f.write('abc') # use write to avoid writing new lines
f.close()
Когда вы перемещаетеуказатель файла, используя seek
, позволяет перезаписать байты, которые уже сохранены в этой позиции.Однако вы не можете «вставить» текст, выталкивая существующие байты вперед, чтобы освободить место для новых данных.Когда я сказал, что вам нужно будет знать точное количество байтов, я имел в виду, что вам придется «оставить место» для текста в начале файла.Примерно так:
f = open("tmp.txt", "w")
f.write("\0\0\0456789")
f.close()
# Some time later...
f = open("tmp.txt", "r+")
f.seek(0)
f.write('123')
f.close()
Для текстовых файлов это может сработать, если вы оставите «пустую» строку, скажем, 50 пробелов в начале файла.Позже вы можете вернуться назад и перезаписать до 50 байтов (символ новой строки - байт 51), не перезаписывая следующие строки.Конечно, вы можете оставить несколько строк в начале.Дело в том, что вы не можете увеличить или уменьшить зарезервированный блок строк, которые будут перезаписаны.Нет ничего особенного в новой строке в файле, кроме того, что она обрабатывается специальными методами, такими как read
и readline
, для разделения блоков данных на отдельные строки.
Чтобы добавить одну или несколько строктекст в начало файла, без перезаписи уже существующего, вам придется использовать решение «прочесть старый файл, записать в новый файл», изложенное в других ответах.