Insertar texto entre líneas de archivo en python

Tengo un archivo que estoy leyendo actualmente usando

fo = open("file.txt", "r") 

Entonces haciendo

 file = open("newfile.txt", "w") file.write(fo.read()) file.write("Hello at the end of the file") fo.close() file.close() 

Básicamente copio el archivo a uno nuevo, pero también agrego un poco de texto al final del archivo recién creado. ¿Cómo podría insertar esa línea, por ejemplo, entre dos líneas separadas por una línea vacía? Es decir:

 line 1 is right here <---- I want to insert here line 3 is right here 

¿Puedo tokenizar diferentes oraciones con un delimitador como \n para una nueva línea?

Primero debe cargar el archivo usando el método open() y luego aplicar el método .readlines() , que se divide en "\n" y devuelve una lista, luego actualiza la lista de cadenas insertando una nueva cadena entre la lista , luego simplemente escriba el contenido de la lista en el nuevo archivo usando el new_file.write("\n".join(updated_list))

NOTA: Este método solo funcionará para archivos que se pueden cargar en la memoria.

 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() no se recomienda porque lee todo el archivo en la memoria. Tampoco es necesario porque puede iterar sobre el archivo directamente.

El siguiente código insertará Hello at line 2 en la línea 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) 

Tenga en cuenta el uso de with open('filename','w') as filevar idioma de with open('filename','w') as filevar . Esto elimina la necesidad de un close() explícito close() porque cierra el archivo automáticamente al final del bloque, y mejor, lo hace incluso si hay una excepción .

Para archivo grande

 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)