Вставьте текст между строками файла в 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
Другие вопросы по тегам