El día 24 de mayo de 2012 17:41, Aldo Martinez Selleras <a...@caonao.cu> escribió: > estoy trabajando en parsear un archivo .ini con el modulo ConfigParser, y > todo lo hace super el modulo, pero tengo una inquietud, que se me traba el > paraguas, a ver si me pueden dar una luz de como resolver el tema, el codigo > es basicamente este
Primeramente, un consejo de estilo: cuando se puede intenta encadenar expresiones lógicas en lugar de anidar 'ifs'. Por ejemplo: if len(conf.options(sect)) > 0: if not conf.get(sect,'tp') == 'Default': if not conf.has_option(sect,"c1"): pasaría a if len(conf.options(sect)) > 0 and not conf.get(sect,'tp') == 'Default' and not conf.has_option(sect,"c1"): Aún más, podrías juntar el 'else' con el siguiente 'if' y quedar todavía más compacto: elif len(conf.options(sect)) > 0 and not conf.get(sect,'tp') == 'Default and not conf.has_option(sect,"c1"): Por otro lado, en el código estás usando variables intermedias que no usas luego. Voy a suponer que es un código sin perfilar del todo. Tal como está se puede eliminar muchas líneas que no sirven de nada (y que nos habría ayudado a nosotros a saber qué querías). Entrando en lo que hace el código, no parece una buena elección usar una lista (que no arreglo) para meter todos los datos que vas sacando. Acabas teniendo una lista plana difícil de manejar (y creo que es lo que vienes a preguntar). Te aconsejo meter los datos en un diccionario para cada usuario, y tener una lista de diccionarios. Un trozo de código sería así: usuario = {} if conf.has_option(sect,'checkavl'): usuario["phone"] = conf.get(sect,'checkavl') usuarios.append(usuario)) Aunque existe un modo más directo para llenar esta lista: usuarios=[dict(sect.items()) for sect in sections] Por dejar un código similar al tuyo, aquí te pongo como lo haría yo: mapping=( ("quota","timequota"), ("status","fg"), ("email","email"), ("last","timeusedlastupdated"), ("lastpw","passwordlastupdated"), ('phone','checkavl'), ('timeused','timeused'), ('tp','tp'), ) for sect in sections: items=dict(sect.items(sect)) if "IsTemplate" in items: plantillas.append(items) elif "c1" not in items and items.get("tp",None)!='Default': usuario=dict((a,items[b]) for (a,b) in mapping if b in items) usuarios.append(usuario) -- Hyperreals *R: http://ch3m4.org/blog Quarks, bits y otras criaturas infinitesimales _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/