python3 - python properties file
ConfigObj/ConfigParser vs. usando YAML para el archivo de configuraciĆ³n de Python (3)
¿Qué es mejor para crear un archivo de configuración para los programas Python, el módulo integrado (ConfigParser) o el proyecto independiente (ConfigObj), o usar el formato de serialización de datos YAML? He escuchado que ConfigObj es más fácil de usar que ConfigParser, aunque no es una biblioteca integrada. También he leído que PyYAML es fácil de usar, aunque YAML toma un poco de tiempo para usarlo. Aparte de la facilidad de implementación, ¿cuál es la mejor opción para crear un archivo de configuración / configuración?
ConfigParser tiene una API realmente mala, se supone que ConfigObj es bueno, pero nunca lo he usado, para los archivos ini por lo general implemento mi propio analizador.
Sin embargo, los formatos ini-like no manejan diferentes tipos, secuencias o mapeos recursivos bien, así que solo usaría yaml. Es fácil de leer y editar con un editor, hay un estándar para analizar esos archivos y usted no tiene ninguno de los inconvenientes mencionados en los formatos tipo ini.
Depende de lo que quieras almacenar en tus archivos de configuración y de cómo los uses.
Si realiza un disparo redondo (yaml → código → yaml) y quiere que se conserven los comentarios, no puede usar
PyYAML
oConfigParser
.Si desea conservar el orden de sus claves (por ejemplo, cuando
PyYAML
sus archivos de configuración),PyYAML
no lo hace a menos que especifique!!omap
(lo que hace que sea menos fácil de actualizar que un mapeo normal)Si desea tener estructuras complejas con listas de elementos sin nombre que contengan asignaciones /
ConfigParser
,ConfigParser
yConfigObj
no lo ayudarán, ya que los pares de clave-valor de los archivos INI tienen que ir a las secciones y las listas solo pueden ser valores.
La implementación ruamel.yaml
del lector YAML es compatible con todo lo anterior ¹. He utilizado el excelente ConfigObj de fuzzyman para la conservación de comentarios de viaje redondo durante mucho tiempo, así como PyYAML para estructuras más complejas y esto combina lo mejor de ambos mundos. ruamel.yaml
incluye la utilidad yaml
que puede convertir archivos INI de ConfigObj
a YAML
¹ ruamel.yaml es una biblioteca YAML que admite YAML 1.2 (recomiendo usar eso, pero luego soy el autor del paquete). PyYAML solo admite (la mayoría de) YAML 1.1.
El uso de ConfigObj es al menos muy sencillo y los archivos ini en general son mucho más simples (y más utilizados) que YAML. Para casos más complejos, incluidos la validación, los valores y tipos predeterminados, ConfigObj proporciona una forma de hacerlo mediante la validación de configspec.
Código simple para leer un archivo ini con ConfigObj:
from configobj import ConfigObj
conf = ConfigObj(''filename.ini'')
section = conf[''section'']
value = section[''value'']
Maneja automáticamente los valores de la lista por usted y permite valores de varias líneas. Si modifica el archivo de configuración, puede volver a escribirlo mientras conserva el orden y los comentarios.
Consulte estos artículos para obtener más información, incluidos ejemplos de la validación de tipo: