La forma más corta probablemente sería usar el módulo de entrada de archivo . Por ejemplo, lo siguiente agrega números de línea a un archivo, en el lugar:
import fileinput
for line in fileinput.input("test.txt", inplace=True):
print('{} {}'.format(fileinput.filelineno(), line), end='') # for Python 3
# print "%d: %s" % (fileinput.filelineno(), line), # for Python 2
Lo que pasa aquí es:
- El archivo original se mueve a un archivo de respaldo
- La salida estándar se redirige al archivo original dentro del bucle
- Por lo tanto, cualquier
printdeclaración vuelve a escribirse en el archivo original
fileinputTiene más campanas y silbatos. Por ejemplo, se puede usar para operar automáticamente en todos los archivos sys.args[1:], sin tener que repetirlos explícitamente. Comenzando con Python 3.2, también proporciona un administrador de contexto conveniente para usar en una withdeclaración.
Si bien fileinputes excelente para los scripts desechables, desconfiaría de usarlo en código real porque es cierto que no es muy legible o familiar. En el código real (de producción) vale la pena gastar unas pocas líneas de código más para hacer que el proceso sea explícito y, por lo tanto, hacer que el código sea legible.
Hay dos opciones:
- El archivo no es demasiado grande y puede leerlo completamente en la memoria. Luego cierre el archivo, vuelva a abrirlo en modo de escritura y vuelva a escribir el contenido modificado.
- El archivo es demasiado grande para ser almacenado en la memoria; puede moverlo a un archivo temporal y abrirlo, leyéndolo línea por línea, volviendo a escribirlo en el archivo original. Tenga en cuenta que esto requiere el doble de almacenamiento.
fileestá sombreando una clase predefinida del mismo nombre.