fileinput es el módulo de la biblioteca estándar de Python que admite "lo que parece una actualización in situ de archivos de texto", así como otras tareas relacionadas.
for line in fileinput.input(['thefile.txt'], inplace=True):
print(line.replace('old stuff', 'shiny new stuff'), end='')
Este código es todo lo necesario para la tarea específica que usted ha mencionado - se ocupa de todos los temas (al grabar en un archivo diferente, retirar el usado cuando se hace y su sustitución por uno nuevo) También puede agregar un parámetro adicional como backup='.bk'
para conservar automáticamente el archivo anterior como (en este caso) thefile.txt.bk
, así como procesar varios archivos, tomar los nombres de archivo para procesar desde la línea de comandos, etc., etc. - lea los documentos, son bastante buenos (¡y también lo es el módulo que sugiero!).
¿Hay algún motivo en particular por el que no desee recorrer las líneas? Probablemente sea la mejor solución. – cobbal
No lo sé ... Me preguntaba si había una mejor manera, supongo. En lugar de crear un nuevo archivo y eliminar el anterior. –
al crear el nuevo archivo, elimina la necesidad de tener todo el archivo en la memoria ... y si está haciendo un re.sub, debe asegurarse de utilizar primero re.compile (y luego use el submétodo de la instancia devuelta) –