ConfigParser y secciones en mayuscula/minuscula
Renato Covarrubias Romero
rnt en bla.cl
Vie Jul 10 14:34:12 CEST 2009
El 10/07/09 07:41, Arnau Sanchez escribió:
> Oswaldo Hernández wrote:
>
>> El problema con el que me encuentro es que si intento leer una sección
>> llamada '[general]' y el usuario la ha escrito como '[GENERAL]' ó
>> '[General]' el modulo ConfigParser no la encuentra.
>
> En general, quien toca un fichero de configuración debería saber lo que
> está haciendo. Pero en fin, supongo que es un caso especial de usuario
> no técnico.
>
>> Veo que una vez que el objeto ConfigParser ha leido el archivo, tiene
>> la propiedad '_sections' que es un diccionario con todo el contenido
>> del archivo ini. La unica solución que se me ocurre hacer una copia de
>> este diccionario convirtiendo los nombres de seccion y clave a
>> minúsculas.
>
> Se me ocurre otra forma, mira:
>
> http://docs.python.org/library/configparser.html#ConfigParser.ConfigParser
>
> El segundo parámetro de ConfigParser() es el tipo de diccionario que
> usará internamente. Si le pasas una clase que implemente un diccionario
> con claves case-insensitive, como por ejemplo ésta de aquí:
>
> http://code.activestate.com/recipes/283455/
>
> Podrás hacer algo así:
>
> parser = ConfigParser(dict_type=caselessDict)
> parser.read("file.conf")
> parse.get("MySECtiON", "var1")
>
>> NOTA: Sorry si este mensaje llega dos veces, lo envie anteriormente
>> con el from erroneo.
>
> Tranquilo, llegó sólo una; si lo mandas desde una cuenta no registrada
> el mensaje queda en espera de aprobación, a mi me ha pasado varias veces
> (lo que no sé es si los administradores se miran esos mensajes o no).
Interesante opción, pero quizás demaciado complejo para lo que necesita.
# ---
from ConfigParser import ConfigParser
class IncaseConfigParser(ConfigParser):
def get(self, section, option, raw=False, vars=None):
for s in self.sections():
if s.lower() == section.lower():
for o in self.options(s):
if o.lower() == option.lower():
return ConfigParser.get(self, s, o, raw, vars)
return None
parse = IncaseConfigParser()
parser.read("file.conf")
parse.get("MySECtiON", "var1")
# ---
Saludos!
--
Renato Covarrubias Romero counter.li.org #399677
rnt [at] rnt.cl http://rnt.cl
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es