Si lo que quiere es simplemente fusionar secciones con nombres idénticos (la última gana), simplemente pase la opción strict=False
al constructor (agregado en Python 3.2). Se obtiene efectivamente dict.update()
comportamiento como las secciones duplicadas se fusionaron en.
Config = configparser.ConfigParser(strict=False)
Sin embargo, es claro a partir de datos de la muestra de la OP que las secciones con nombres idénticos deben mantenerse separados, para evitar la pérdida de datos. ConfigParser
almacena las secciones que lee en un diccionario, por lo que no puede manejar varias secciones con el mismo nombre. Afortunadamente, el constructor acepta un argumento dict_type
que le permite especificar un objeto similar a un diccionario. Puede usar eso para soportar secciones con nombres idénticos. Aquí hay una solución simple que altera los nombres de las secciones al agregar un número único cada vez que se ha visto un nombre de sección.
from collections import OrderedDict
class multidict(OrderedDict):
_unique = 0 # class variable
def __setitem__(self, key, val):
if isinstance(val, dict):
self._unique += 1
key += str(self._unique)
OrderedDict.__setitem__(self, key, val)
Config = configparser.ConfigParser(defaults=None, dict_type=multidict, strict=False)
Con un poco de trabajo, debería ser capaz de construir una solución más limpia.
¿Tiene control sobre el formato de archivo de configuración? Si es así, cámbialo a algo que le guste a 'configparser'. –
No puedo cambiar el formato de archivo. – ExyTab
Sugiero que escriba su propio analizador para ello. – aquavitae