python - example - Escribiendo comentarios a archivos con ConfigParser
configparser python example (4)
¿Cómo se pueden escribir comentarios a un archivo dado dentro de las secciones?
Si tengo:
import ConfigParser
with open(''./config.ini'', ''w'') as f:
conf = ConfigParser.ConfigParser()
conf.set(''DEFAULT'', ''test'', 1)
conf.write(f)
Obtendré el archivo:
[DEFAULT]
test = 1
Pero, ¿cómo puedo obtener un archivo con comentarios dentro de la sección [DEFAULT]
, como:
[DEFAULT]
; test comment
test = 1
Sé que puedo escribir códigos a archivos haciendo:
import ConfigParser
with open(''./config.ini'', ''w'') as f:
conf = ConfigParser.ConfigParser()
conf.set(''DEFAULT'', ''test'', 1)
conf.write(f)
f.write(''; test comment'') # but this gets printed after the section key-value pairs
¿Es esta una posibilidad con ConfigParser? Y no quiero probar otro módulo porque necesito mantener mi programa lo más "en stock" posible.
Actualización para 3.7
He estado tratando con configparser últimamente y encontré esta publicación. Pensé que lo actualizaría con información relevante a 3.7.
Ejemplo 1:
config = configparser.ConfigParser(allow_no_value=True)
config.set(''SECTION'', ''; This is a comment.'', None)
Ejemplo 2:
config = configparser.ConfigParser(allow_no_value=True)
config[''SECTION''] = {''; This is a comment'':None, ''Option'':''Value'')
Ejemplo 3: Si desea mantener su letra mayúscula sin cambios (la opción predeterminada es convertir todos los pares de opciones: valor en minúsculas)
config = configparser.ConfigParser(allow_no_value=True)
config.optionxform = str
config.set(''SECTION'', ''; This Comment Will Keep Its Original Case'', None)
Donde "SECCIÓN" es el nombre de la sección que distingue entre mayúsculas y minúsculas a la que desea agregar el comentario. El uso de "Ninguno" (sin comillas) en lugar de una cadena vacía ('''') le permitirá establecer el comentario sin dejar un "=".
Puede usar la opción allow_no_value si tiene la versión> = 2.7
Este fragmento de código:
import ConfigParser
config = ConfigParser.ConfigParser(allow_no_value=True)
config.add_section(''default_settings'')
config.set(''default_settings'', ''; comment here'')
config.set(''default_settings'', ''test'', 1)
with open(''config.ini'', ''w'') as fp:
config.write(fp)
config = ConfigParser.ConfigParser(allow_no_value=True)
config.read(''config.ini'')
print config.items(''default_settings'')
creará un archivo ini como este:
[default_settings]
; comment here
test = 1
Puedes crear una variable que comienza por # o; personaje:
conf.set(''default_settings'', ''; comment here'', '''')
conf.set(''default_settings'', ''test'', 1)
El archivo conf creado es
[default_settings]
; comment here =
test = 1
La función ConfigParser.read no analizará el primer valor
config = ConfigParser.ConfigParser()
config.read(''config.ini'')
print config.items(''default_settings'')
da
[(''test'',''1'')]
También ConfigUpdater usar ConfigUpdater . Tiene muchas más opciones de conveniencia para actualizar los archivos de configuración de una manera mínimamente invasiva.
Básicamente harías:
from configupdater import ConfigUpdater
updater = ConfigUpdater()
updater.add_section(''DEFAULT'')
updater.set(''DEFAULT'', ''test'', 1)
updater[''DEFAULT''][''test''].add_before.comment(''test comment'', comment_prefix='';'')
with open(''./config.ini'', ''w'') as f:
updater.write(f)