Insertar texto en un archivo de texto siguiendo un texto específico usando Python

Tengo que editar algunos archivos de texto para incluir nueva información, pero necesitaré insertar esa información en ubicaciones específicas en el archivo según el texto que lo rodea.

Esto no funciona como lo necesito para:

with open(full_filename, "r+") as f: lines = f.readlines() for line in lines: if 'identifying text' in line: offset = f.tell() f.seek(offset) f.write('Inserted text') 

… en que agrega el texto al final del archivo. ¿Cómo lo escribiría en la siguiente línea después del texto de identificación?

(AFAICT, esto no es un duplicado de preguntas similares, ya que ninguno de ellos pudo proporcionar esta respuesta)

Si no necesita trabajar en su lugar, entonces tal vez algo como:

 with open("old.txt") as f_old, open("new.txt", "w") as f_new: for line in f_old: f_new.write(line) if 'identifier' in line: f_new.write("extra stuff\n") 

(o, para ser compatible con Python-2.5):

 f_old = open("old.txt") f_new = open("new.txt", "w") for line in f_old: f_new.write(line) if 'identifier' in line: f_new.write("extra stuff\n") f_old.close() f_new.close() 

que gira

 >>> !cat old.txt a b c d identifier e 

dentro

 >>> !cat new.txt a b c d identifier extra stuff e 

(La advertencia habitual sobre el uso de ‘string1’ en ‘string2’: ‘nombre’ en ‘esmalte’ es Verdadero, ‘hola’ en ‘Othello’ es Verdadero, etc., pero obviamente puede hacer que la condición sea arbitrariamente complicada).

Podría usar una expresión regular y luego reemplazar el texto.

 import re c = "This is a file's contents, apparently you want to insert text" re.sub('text', 'text here', c) print c 

devuelve “Este es el contenido de un archivo, aparentemente desea insertar texto aquí”

No estoy seguro de si funcionará para tu caso de uso, pero es agradable y simple si se ajusta.

Esto buscará cualquier cadena, en el archivo (no específica, para estar solo al inicio de la línea, es decir, también puede existir en varias líneas).

Típicamente puedes seguir el algo como:

  1. busque la cadena en el archivo y capture “ubicación”
  2. luego divida el archivo sobre esta “ubicación” e intente crear nuevos archivos como
    • escribir contenido de inicio a loc en un archivo nuevo
    • a continuación, escriba su “NUEVO TEXTO” en el nuevo archivo
    • A continuación, de loc-to-end contenido a nuevo archivo

Veamos el código:

 #!/usr/bin/python import os SEARCH_WORD = 'search_text_here' file_name = 'sample.txt' add_text = 'my_new_text_here' final_loc=-1 with open(file_name, 'rb') as file: fsize = os.path.getsize(file_name) bsize = fsize word_len = len(SEARCH_WORD) while True: found = 0 pr = file.read(bsize) pf = pr.find(SEARCH_WORD) if pf > -1: found = 1 pos_dec = file.tell() - (bsize - pf) file.seek(pos_dec + word_len) bsize = fsize - file.tell() if file.tell() < fsize: seek = file.tell() - word_len + 1 file.seek(seek) if 1==found: final_loc = seek print "loc: "+str(final_loc) else: break # create file with doxygen comments f_old = open(file_name,'r+') f_new = open("new.txt", "w") f_old.seek(0) fStr = str(f_old.read()) f_new.write(fStr[:final_loc-1]); f_new.write(add_text); f_new.write(fStr[final_loc-1:]) f_new.close() f_old.close()