Re: Búsqueda por expresión regular y reemplazo de líneas

Chema Cortes pych3m4 en gmail.com
Mar Jul 31 03:29:41 CEST 2007


El 30/07/07, Lisandro Gallo <datilor en gmail.com> escribió:

> Resulta que estoy queriendo armar un pequeño script que modifique un
> archivo de configuración, más concretamente necesito que al ingresar
> una cadena, si esa cadena existe en el archivo reemplace las 5 líneas
> debajo de la línea donde está dicha cadena, con otras líneas con
> cadenas que previamente ingresé. Traté de hacerlo en bash con awk y
> sed y la verdad que no he podido encontrarle la vuelta, así que pensé
> que Python podía ser una buena alternativa.
>
> ¿Les parece que se pueda hacer algo parecido en Python e integrarlo
> con un script en bash?

Tanto awk como sed ven los ficheros como flujo de líneas de texto; las
modificaciones consisten en crear un nuevo fichero a partir del
original, procesando línea por línea (con preámbulos y finalizadores
en el caso de awk).

Para modificar el fichero "in situ", como parece ser tu caso, no hay
nada en python específico. Tendrás que usar funciones de bajo nivel
(posix), pero las líneas que sustituyas tendrán que ser del mismo
tamaño que las que había.

Una posibilidad es emplear ConfigParser; aunque no veo cómo te puede
ayudar sin conocer algo más de lo que buscas; pero es, casi seguro, lo
que buscas.

Según tu necesidad, una solución adecuada podría ser una base de datos
Berkeley. Es muy rápida y python sabe usarla muy bien:

import bsddb

cfg=bsddb.rnopen("MyFile.db","w")

for n,s in f.iteritems():
  if "Cadena" in s:
    f[n+1]="cadena1"
    f[n+2]="cadena2"
    f[n+3]="cadena3"
    f[n+4]="cadena4"
    f[n+5]="cadena5"
    break

cfg.close()




Más información sobre la lista de distribución Python-es