Для начала, потому что я был сожжен раньше кем-то с отключением питания, этот вопрос не для домашней работы.
В любом случае, у меня есть текстовый файл, который выглядит примерно так:
####
# File section 1
####
1.0 abc Description1
6.5 def Description2
1.0 2.0 3.0 ghi Description3
11 jkl Description
####
# File section 2
####
1.0 abc Description1
12.5 def Description2
1.0 2.0 3.0 ghi Description3
11 jkl Description
#### End file
Я хотел бы заменить строку "1.0" в 2 строки:
1.0 abc Description1
Однако, НЕ строка "1.0" в строках:
1.0 2.0 3.0 ghi Description3
Текущий код, который я использую:
with open('sample_file.txt','r') as file:
filedata = file.read()
filedata = filedata.replace('1.0','2.0')
with open('sample_file.txt','w') as file:
file.write(filedata)
Однако в результате все вхождения «1.0» заменяются.Затем я должен вернуться в файл и исправить ошибку.Результирующий файл, который я хотел бы получить:
####
# File section 1
####
2.0 abc Description1
6.5 def Description2
1.0 2.0 3.0 ghi Description3
11 jkl Description
####
# File section 2
####
2.0 abc Description1
12.5 def Description2
1.0 2.0 3.0 ghi Description3
11 jkl Description
#### End file
Как я могу получить это?Я не мог найти пример решения этого типа проблемы.Спасибо всем за помощь.
РЕДАКТИРОВАТЬ: Моя ошибка в том, что я ничего не прояснил, но строка, которую я хочу заменить, не всегда "1.0" и не всегда 3 символа в длину.Это может быть, например, «-12,3».Я хотел бы сделать код как можно более универсальным.
Я также пытался использовать rsplit для выделения первой строки, используя пробел в качестве разделителя, но, похоже, это не работает для записи в файл.
========================
РЕДАКТИРОВАТЬ2: Я нашел способ сделать это, хотя это, кажется, довольно круглый-о метод:
with open('sample_file.txt','r') as file:
filedata = file.readlines()
for line in filedata:
if 'abc' in line:
oriline = line
newline = line.replace(str(spk),str(newspk))
with open('sample_file.txt','r') as file:
filedata = file.read()
filedata = filedata.replace(str(oriline),str(newline))
with open('sample_file.txt','w') as file:
file.write(filedata)
По сути, он откроет файл, прочитает построчно всю строку, содержащую конкретную строку, которую я хочу, а затем просто сохранит ее в памяти.Затем снова откройте файл, прочитайте все и просто замените всю эту строку.Затем откройте файл и запишите файл.
Он делает то, что я хочу, но есть ли способ упростить код?