Вопрос-Ответ

How to modify a text file?

Как изменить текстовый файл?

Я использую Python и хотел бы вставить строку в текстовый файл без удаления или копирования файла. Как я могу это сделать?

Переведено автоматически
Ответ 1

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

Это дело операционной системы, а не Python. Оно одинаково во всех языках.

Что я обычно делаю, так это считываю из файла, вношу изменения и записываю их в новый файл с именем myfile.txt.tmp или что-то в этом роде. Это лучше, чем считывать весь файл в память, потому что файл может быть слишком большим для этого. Как только создание временного файла завершено, я переименовываю его так же, как исходный файл.

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

Ответ 2

Зависит от того, что вы хотите сделать. Для добавления вы можете открыть его с помощью "a":

 with open("foo.txt", "a") as f:
f.write("new line\n")

Если вы хотите что-то подготовить, вам нужно сначала прочитать из файла:

with open("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 in enumerate(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")

source.close()
destination.close()

Вместо shutil вы можете использовать следующее.

import os
os.rename(aFile, aFile + "~")
2023-10-13 06:45 python file