Я использую Python и хотел бы вставить строку в текстовый файл без удаления или копирования файла. Как я могу это сделать?
Переведено автоматически
Ответ 1
К сожалению, нет способа вставить в середину файла без его перезаписи. Как указывалось в предыдущих постерах, вы можете добавить в файл или перезаписать его часть с помощью seek, но если вы хотите добавить что-то в начале или середине, вам придется переписать это.
Это дело операционной системы, а не Python. Оно одинаково во всех языках.
Что я обычно делаю, так это считываю из файла, вношу изменения и записываю их в новый файл с именем myfile.txt.tmp или что-то в этом роде. Это лучше, чем считывать весь файл в память, потому что файл может быть слишком большим для этого. Как только создание временного файла завершено, я переименовываю его так же, как исходный файл.
Это хороший и безопасный способ сделать это, потому что, если запись в файл завершается сбоем или прерывается по какой-либо причине, у вас остается нетронутый исходный файл.
Ответ 2
Зависит от того, что вы хотите сделать. Для добавления вы можете открыть его с помощью "a":
withopen("foo.txt", "a") as f: f.write("new line\n")
Если вы хотите что-то подготовить, вам нужно сначала прочитать из файла:
withopen("foo.txt", "r+") as f: old = f.read() # read everything in the file f.seek(0) # rewind f.write("new line\n" + old) # write the new line before
Ответ 3
fileinput Модуль стандартной библиотеки Python перезапишет файл inplace, если вы используете параметр inplace=1:
import sys import fileinput
# replace all occurrences of 'sit' with 'SIT' and insert a line after the 5th for i, line inenumerate(fileinput.input('lorem_ipsum.txt', inplace=1)): sys.stdout.write(line.replace('sit', 'SIT')) # replace 'sit' and write if i == 4: sys.stdout.write('\n') # write a blank line after the 5th line
Ответ 4
Перезапись файла на месте часто выполняется путем сохранения старой копии с измененным именем. Пользователи Unix добавляют ~, чтобы отметить старую копию. Люди из Windows делают всевозможные вещи - добавляют .bak или .old - или переименовывают файл полностью, или ставят ~ перед именем.
import shutil shutil.move(afile, afile + "~")
destination= open(aFile, "w") source= open(aFile + "~", "r") for line in source: destination.write(line) if <some condition>: destination.write(<some additional line> + "\n")