Python encuentra patrón y reemplaza toda la línea

def replace(file_path, pattern, subst): file_path = os.path.abspath(file_path) #Create temp file fh, abs_path = mkstemp() new_file = open(abs_path,'w') old_file = open(file_path) for line in old_file: new_file.write(line.replace(pattern, subst)) #close temp file new_file.close() close(fh) old_file.close() #Remove original file remove(file_path) #Move new file move(abs_path, file_path) 

Tengo esta función para reemplazar la cadena en un archivo. Pero no puedo encontrar una buena manera de reemplazar toda la línea donde se encuentra el patrón.

Por ejemplo, si quisiera reemplazar una línea que contenga: “John trabajó duro todo el día” usando el patrón “John” y el reemplazo sería “Mike no trabajó tan duro”.

Con mi función actual, tendría que escribir toda la línea en patrón para reemplazar toda la línea.

En primer lugar, podrías cambiar esta parte:

 for line in old_file: new_file.write(line.replace(pattern, subst)) 

Dentro de esto:

 for line in old_file: if pattern in line: new_file.write(subst) else: new_file.write(line) 

O podrías hacerlo aún más bonito:

 for line in old_file: new_file.write(subst if pattern in line else line)