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

Arnau Sanchez arnau en ehas.org
Mar Jul 31 11:32:39 CEST 2007


Chema Cortes escribió:

> 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.

Uhm, yo le diría que no se obsesionara con hacerlo "in situ", mucho más si está 
empezando con el lenguaje. Como primera aproximación, se lee el contenido del 
fichero en una lista, se modifica y se reescribe entero. Los ficheros de 
configuración suelen ser pequeños y no sería ineficiente.

> 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.

Por si acaso, ConfigParser es el módulo para trabajar con fichero de 
configuración tipo INI:

[seccion1]
key1 = value

Lo que pasa es que ConfigParser es demasiado simple, y funcionalidad básica como 
conservar el orden de secciones y parámetros, o respetar los comentarios, se los 
pasa por el forro. Una alternativa a ConfigParser es ConfigObj:

http://www.voidspace.org.uk/python/configobj.html

El autor intentó meterlo en la librería estándar, pero a Guido no le gustan 
cosas tan complejas. A mi tampoco me convence el código (excesivamente verboso), 
pero funciona muy bien. Sabe trabajar sin secciones, te respeta el orden, los 
comentarios, permite secciones anidadas, dispone de un validador, etc.

> 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:

Parece lo idóneo para este caso, aunque no estaría mal que lo hiciera primero "a 
mano" para practicar :-)




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