examples python json settings config ini

python - examples - seaborn



Python: ¿cómo guardarías un archivo de configuración/configuración simple? (4)

Archivos de configuración en python

Hay varias maneras de hacerlo dependiendo del formato de archivo requerido.

ConfigParser [formato .ini]

configparser enfoque estándar del configparser a menos que hubiera razones de peso para usar un formato diferente.

Escribe un archivo como ese:

from ConfigParser import SafeConfigParser config = SafeConfigParser() config.read(''config.ini'') config.add_section(''main'') config.set(''main'', ''key1'', ''value1'') config.set(''main'', ''key2'', ''value2'') config.set(''main'', ''key3'', ''value3'') with open(''config.ini'', ''w'') as f: config.write(f)

El formato de archivo es muy simple con secciones marcadas entre corchetes:

[main] key1 = value1 key2 = value2 key3 = value3

Los valores se pueden extraer del archivo así:

from ConfigParser import SafeConfigParser config = SafeConfigParser() config.read(''config.ini'') print config.get(''main'', ''key1'') # -> "value1" print config.get(''main'', ''key2'') # -> "value2" print config.get(''main'', ''key3'') # -> "value3" # getfloat() raises an exception if the value is not a float a_float = config.getfloat(''main'', ''a_float'') # getint() and getboolean() also do this for their respective types an_int = config.getint(''main'', ''an_int'')

JSON [formato json]

Los datos JSON pueden ser muy complejos y tienen la ventaja de ser muy portátiles.

Escribir datos en un archivo:

import json config = {''key1'': ''value1'', ''key2'': ''value2''} with open(''config.json'', ''w'') as f: json.dump(config, f)

Leer datos de un archivo:

import json with open(''config.json'', ''r'') as f: config = json.load(f) #edit the data config[''key3''] = ''value3'' #write it back to the file with open(''config.json'', ''w'') as f: json.dump(config, f)

YAML

Un ejemplo básico de YAML se proporciona en esta respuesta . Se pueden encontrar más detalles en el sitio web pyYAML .

No me importa si es JSON, pickle, YAML, o lo que sea.

Todas las demás implementaciones que he visto no son compatibles con versiones anteriores, así que si tengo un archivo de configuración, agrego una nueva clave en el código, luego cargo ese archivo de configuración, simplemente se bloqueará.

¿Hay alguna manera simple de hacer esto?


Ejemplo básico de ConfigParser

El archivo se puede cargar y usar así:

#!/usr/bin/env python import ConfigParser import io # Load the configuration file with open("config.yml") as f: sample_config = f.read() config = ConfigParser.RawConfigParser(allow_no_value=True) config.readfp(io.BytesIO(sample_config)) # List all contents print("List all contents") for section in config.sections(): print("Section: %s" % section) for options in config.options(section): print("x %s:::%s:::%s" % (options, config.get(section, options), str(type(options)))) # Print some contents print("/nPrint some contents") print(config.get(''other'', ''use_anonymous'')) # Just get the value print(config.getboolean(''other'', ''use_anonymous'')) # You know the datatype?

que salidas

List all contents Section: mysql x host:::localhost:::<type ''str''> x user:::root:::<type ''str''> x passwd:::my secret password:::<type ''str''> x db:::write-math:::<type ''str''> Section: other x preprocessing_queue:::["preprocessing.scale_and_center", "preprocessing.dot_reduction", "preprocessing.connect_lines"]:::<type ''str''> x use_anonymous:::yes:::<type ''str''> Print some contents yes True

Como puede ver, puede usar un formato de datos estándar que sea fácil de leer y escribir. Los métodos como getboolean y getint le permiten obtener el tipo de datos en lugar de una cadena simple.

Configuración de escritura

import os configfile_name = "config.yaml" # Check if there is already a configurtion file if not os.path.isfile(configfile_name): # Create the configuration file as it doesn''t exist yet cfgfile = open(configfile_name, ''w'') # Add content to the file Config = ConfigParser.ConfigParser() Config.add_section(''mysql'') Config.set(''mysql'', ''host'', ''localhost'') Config.set(''mysql'', ''user'', ''root'') Config.set(''mysql'', ''passwd'', ''my secret password'') Config.set(''mysql'', ''db'', ''write-math'') Config.add_section(''other'') Config.set(''other'', ''preprocessing_queue'', [''preprocessing.scale_and_center'', ''preprocessing.dot_reduction'', ''preprocessing.connect_lines'']) Config.set(''other'', ''use_anonymous'', True) Config.write(cfgfile) cfgfile.close()

resultados en

[mysql] host = localhost user = root passwd = my secret password db = write-math [other] preprocessing_queue = [''preprocessing.scale_and_center'', ''preprocessing.dot_reduction'', ''preprocessing.connect_lines''] use_anonymous = True

Ejemplo básico de XML

Parece que no se usa en absoluto para los archivos de configuración de la comunidad de Python. Sin embargo, analizar / escribir XML es fácil y hay muchas posibilidades de hacerlo con Python. Uno es BeautifulSoup:

from BeautifulSoup import BeautifulSoup with open("config.xml") as f: content = f.read() y = BeautifulSoup(content) print(y.mysql.host.contents[0]) for tag in y.other.preprocessing_queue: print(tag)

donde el config.xml podría verse así

<config> <mysql> <host>localhost</host> <user>root</user> <passwd>my secret password</passwd> <db>write-math</db> </mysql> <other> <preprocessing_queue> <li>preprocessing.scale_and_center</li> <li>preprocessing.dot_reduction</li> <li>preprocessing.connect_lines</li> </preprocessing_queue> <use_anonymous value="true" /> </other> </config>


Guarde y cargue un diccionario. Tendrás claves arbitrarias, valores y un número arbitrario de claves, pares de valores.


Si desea usar algo así como un archivo INI para mantener la configuración, considere usar configparser que carga los pares de valores clave de un archivo de texto, y puede volver a escribir fácilmente en el archivo.

El archivo INI tiene el formato:

[Section] key = value key with spaces = somevalue