Простой способ добавить текст в начале скрипта (файла) в Python - PullRequest
2 голосов
/ 12 января 2012

Я новичок в Python, и мой следующий проект - это программа, в которой вы вводите детали своей программы, а затем выбираете файл (я использую Tkinter), а затем программа отформатирует детали и запишет их вначало файла.

Я знаю, что вам придется «переписать» его, и что файл tmp, вероятно, находится под рукой.Я просто хочу знать, как можно просто добавить текст в начало файла.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 12 января 2012

Чтобы добавить текст в начало файла, вы можете (1) открыть файл для чтения, (2) прочитать файл, (3) открыть файл для записи и перезаписать его (ваш текст + исходный файл).текст).

formatted_text_to_add = 'Sample text'
with open('userfile', 'rb') as filename:
    filetext = filename.read()

newfiletext = formatted_text_to_add + '/n' + filetext
with open('userfile', 'wb') as filename:   
    filename.write(newfiletext)

Это требует двух операций ввода-вывода, и я испытываю желание найти способ сделать это за один проход.Тем не менее, предыдущие ответы на подобные вопросы предполагают, что попытка записи в начало или середину файла в Python усложняется довольно быстро, если вы не укусите маркер и не перезапишите исходный файлновый текст.

0 голосов
/ 12 января 2012

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

# 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, для разделения блоков данных на отдельные строки.

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

0 голосов
/ 12 января 2012

Если я понимаю, что вы спрашиваете, я думаю, что вы ищете то, что называется каркасом проекта.Эта ссылка справляется с этим довольно хорошо.

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