Leí la parte de the docs y vi que ConfigParser
devuelve una lista de pares clave/valor para las opciones dentro de una sección. Pensé que las claves no necesitaban ser únicas dentro de una sección, de lo contrario, el analizador solo devolvería una asignación. Diseñé mi esquema de archivo de configuración en torno a esta suposición, entonces se dio cuenta con tristeza que este no es el caso:Teclas exclusivas ConfigParser de Python por sección
>>> from ConfigParser import ConfigParser
>>> from StringIO import StringIO
>>> fh = StringIO("""
... [Some Section]
... spam: eggs
... spam: ham
... """)
>>> parser = ConfigParser()
>>> parser.readfp(fh)
>>> print parser.items('Some Section')
[('spam', 'ham')]
Luego volví y encontró la parte de la documentación que debería leído:
Las secciones se almacenan normalmente en un diccionario incorporado . Se puede pasar un tipo de diccionario alternativo al constructor ConfigParser . Por ejemplo, si se pasa un tipo de diccionario que ordena sus claves, las secciones serán ordenadas en write-back, al igual que las claves dentro de cada sección.
Para mantener mi esquema de archivo de configuración existente (que realmente me gusta ahora;) estoy pensando en pasar un objeto similar a un mapeo como se mencionó anteriormente que acumula valores en lugar de destruirlos. ¿Hay alguna manera más simple de evitar el colapso de clave/valor que me falta? En lugar de hacer un adaptador loco (que podría romperse si cambia la implementación de ConfigParser
) ¿debería escribir una variante del ConfigParser
?
Siento que este puede ser uno de esos momentos 'duh' en los que solo veo las soluciones difíciles.
[Editar:] Aquí hay un ejemplo más preciso de la forma en que me gustaría utilizar la misma clave varias veces:
[Ignored Paths]
ignore-extension: .swp
ignore-filename: tags
ignore-directory: bin
No me gusta la sintaxis de la lista separada por comas, porque es difícil en el ojos cuando lo escalas a muchos valores; por ejemplo, una lista delimitada por comas de cincuenta extensiones no sería particularmente legible.
Creo que usar listas sería más legible que 50 líneas de 'ignorar-extensión: ...' –
¿De verdad? No estoy de acuerdo ... con cada uno en una línea separada, puedes escanear la lista: nunca he encontrado listas delimitadas por comas de extensiones de tres letras para ser bonita. También anticipo que las personas quieran comentar fácilmente cualquier opción dada, a lo que se dirigen las líneas separadas. – cdleary