Вставьте текст между строками файла в Python
У меня есть файл, который я сейчас читаю с помощью
fo = open("file.txt", "r")
Затем, делая
file = open("newfile.txt", "w")
file.write(fo.read())
file.write("Hello at the end of the file")
fo.close()
file.close()
Я в основном копирую файл в новый, но также добавляю текст в конец вновь созданного файла. Как бы я мог вставить эту строку, скажем, между двумя строками, разделенными пустой строкой? То есть:
line 1 is right here
<---- I want to insert here
line 3 is right here
Могу ли я разложить различные предложения по разделителю, например \n
для новой строки?
4 ответа
Сначала вы должны загрузить файл, используя open()
метод, а затем применить .readlines()
метод, который разбивает на "\n"
и возвращает список, затем вы обновляете список строк, вставляя новую строку между списками, а затем просто записываете содержимое списка в новый файл, используя new_file.write("\n".join(updated_list))
ПРИМЕЧАНИЕ. Этот метод будет работать только для файлов, которые можно загрузить в память.
with open("filename.txt", "r") as prev_file, open("new_filename.txt", "w") as new_file:
prev_contents = prev_file.readlines()
#Now prev_contents is a list of strings and you may add the new line to this list at any position
prev_contents.insert(4, "\n This is a new line \n ")
new_file.write("\n".join(prev_contents))
readlines()
не рекомендуется, потому что он читает весь файл в память. Это также не нужно, потому что вы можете перебирать файл напрямую.
Следующий код вставит Hello at line 2
в строке 2
with open('file.txt', 'r') as f_in:
with open('file2.txt','w') as f_out:
for line_no, line in enumerate(f_in, 1):
if line_no == 2:
f_out.write('Hello at line 2\n')
f_out.write(line)
Обратите внимание на использование with open('filename','w') as filevar
идиома. Это устраняет необходимость явного close()
потому что он закрывает файл автоматически в конце блока, и лучше, он делает это, даже если есть исключение.
Для большого файла
with open ("s.txt","r") as inp,open ("s1.txt","w") as ou:
for a,d in enumerate(inp.readlines()):
if a==2:
ou.write("hi there\n")
ou.write(d)
Вы могли бы использовать маркер
#FILE1
line 1 is right here
<INSERT_HERE>
line 3 is right here
#FILE2
some text
with open("FILE1") as file:
original = file.read()
with open("FILE2") as input:
myinsert = input.read()
newfile = orginal.replace("<INSERT_HERE>", myinsert)
with open("FILE1", "w") as replaced:
replaced.write(newfile)
#FILE1
line 1 is right here
some text
line 3 is right here