Hay una combinación de técnicas que he encontrado útiles para resolver este problema:
with open(file, 'r+') as fd:
contents = fd.readlines()
contents.insert(index, new_string) # new_string should end in a newline
fd.seek(0) # readlines consumes the iterator, so we need to start over
fd.writelines(contents) # No need to truncate as we are increasing filesize
en nuestra aplicación particular, queríamos añadirlo despues de una determinada cadena:
with open(file, 'r+') as fd:
contents = fd.readlines()
if match_string in contents[-1]: # Handle last line to prevent IndexError
contents.append(insert_string)
else:
for index, line in enumerate(contents):
if match_string in line and insert_string not in contents[index + 1]:
contents.insert(index + 1, insert_string)
break
fd.seek(0)
fd.writelines(contents)
Si desea que se inserte la cadena después de cada instancia del partido, en lugar de sólo la primera, retirar el else:
(y adecuadamente Unindent) y el break
.
Tenga en cuenta también que el and insert_string not in contents[index + 1]:
impide que agregue más de una copia después del match_string
, por lo que es seguro ejecutarlo repetidamente.
Dudo que no encuentre una solución a esto con algunas investigaciones básicas. ¿Estás seguro de haber hecho eso? –
@AbhranilDas gracias a la buena redacción de tkbx ¡Encontré inmediatamente esta respuesta! – dmeu
relacionado: [¿Cómo escribo en medio de un archivo de texto mientras leo su contenido?] (Http://stackoverflow.com/q/16556944/4279) – jfs