Tengo algún archivo de configuración de esta manera:
[main]
key_one =
hello
this
is
indented
Pero cuando lo leí usando la biblioteca ConfigParser en Python, así:
import configparser
cfg = configparser.ConfigParser()
cfg.read("path/to/file.ini")
print(cfg["main"]["key_one"])
Imprime:
hello
this
is
indented
He intentado usar pestañas, más de dos espacios por guión, nada parece funcionar. ¿Cómo puedo obtener ConfigParser reconocer guiones?
El analizador en sí siempre se tira espacios iniciales; por lo que yo puedo decir, no hay manera (recomendado) para cambiar eso.
Una solución es utilizar un personaje no está en blanco para indicar el comienzo de su texto con formato, a continuación, la tira que después de leer el archivo. Por ejemplo,
[main]
key_one =| hello
| this
| is
| indented
Luego, en la secuencia de comandos
import configparser
import re
cfg = configparser.ConfigParser()
cfg.read("tmp.ini")
t = cfg["main"]["key_one"]
t = re.sub("^\|", "", t, flags=re.MULTILINE)
print(t)
que produce
$ python3 tmp.py
hello
this
is
indented
El valor se inicia inmediatamente después de la =
(Moví su primera línea de arriba, suponiendo que realmente no desea que el valor de empezar con un carácter de nueva línea). El analizador conserva cualquier espacio en blanco no se arrastra después |
, ya que el primero no está en blanco en cada línea. re.sub
eliminará la inicial |
de cada línea, dejando la cadena de múltiples líneas con sangría deseado como el resultado.