2010-06-09 14 views
7

Me gustaría utilizar un formato de archivo de configuración que admita pares de valores clave y estructuras insertables y repetibles, y que sea tan claro como sea posible. Me estoy imaginando algo parecido a:Python: formato de archivo de configuración decente

cachedir = /var/cache 
mail_to = [email protected] 

job { 
    name = my-media 
    frequency = 1 day 
    source { 
     from = /home/michael/Images 

    source { } 
    source { }  
} 

job { } 

Estaría encantado con algo que usase un espacio en blanco significativo también.

JSON requiere demasiadas reglas de sintaxis explícitas (comillas, comas, etc.). YAML es realmente bastante bueno, pero requeriría que los trabajos se definan como una lista YAML, que me resulta un poco incómodo de usar.

Respuesta

13

Creo YAML es ideal para este propósito, en realidad:

jobs: 
- name: my-media 
    ... 

- name: something else 
    ... 

O, como un diccionario en lugar de la lista:

jobs: 
    my-media: 
    frequency: 1 day 
    ... 
    something-else: 
    frequency: 2 day 
    ... 

Otra cosa a tener en cuenta, que puede que no tenga, es usando la fuente de Python para la configuración. Puede anidar dictados y listas de Python de una manera muy legible y proporciona múltiples beneficios inesperados. Django usa fuente de Python para sus archivos de configuración, por ejemplo.

+1

Gracias por la idea dict. Preferiría esa sintaxis sobre una lista, no había considerado ese enfoque. – miracle2k

2

creo que usted debe comprobar libconfig biblioteca http://www.hyperrealm.com/libconfig/. Debería haber enlaces de pitón en algún lugar para ello.

Otra solución es usar el formato json que ya proporciona python. Documentación de búsqueda para el módulo JSON.

8

Como el módulo incorporado configparser de Python no parece soportar secciones anidadas, primero probaría ConfigObj. (Consulte un tutorial introductorio here).De acuerdo con su página de inicio, esto es el conjunto de características dignas de mención:

  • secciones anidadas (subsecciones), a cualquier nivel
  • valores de lista de valores
  • de varias líneas
  • cadena de interpolación (sustitución)
  • integrado con un potente sistema de validación
    • incluyendo el tipo de comprobación automática/conversión
    • secciones repetidas
    • y permitiendo que los valores por defecto
  • Al escribir ficheros de configuración, ConfigObj conserva todos los comentarios y el orden de los miembros y secciones
  • muchos métodos y opciones útiles para trabajar con archivos de configuración (como el método 'recarga') de soporte
  • completa Unicode

ConfigObj es utilizado por Bazaar, Trac, IPython, matplotlib y muchos otros pr Python grande Oye, parece bastante maduro y estable para mí (aunque nunca lo utilicé).

0

También puede considerar Jsonnet si sus necesidades exceden estas otras opciones. Jsonnet es una extensión de JSON que a primera vista agrega comentarios, relaja las reglas de coma y elimina la necesidad de tantas citas. Pero si miras más a fondo ves que realmente proporciona un lenguaje de programación completamente funcional y tiene soporte para la extensión de la plantilla a través de mixins, importaciones de archivos, etc. Hay un enlace de Python para él, pero su implementación real es C++.

Cuestiones relacionadas