簡體   English   中英

從python中的configparser讀取時,如何將縮進包含在多行值中?

[英]How can I get indentation to be included in a multiline value when read from configparser in python?

我有一些這樣的配置文件:

[main]
key_one   =
  hello
    this
      is
        indented

但是當我像這樣使用 python 中的 configparser 庫讀取它時:

import configparser
cfg = configparser.ConfigParser()
cfg.read("path/to/file.ini")
print(cfg["main"]["key_one"])

打印出來:

hello
this
is
indented

我試過使用制表符,每個縮進兩個以上的空格,似乎沒有任何效果。 如何讓 configparser 識別縮進?

解析器本身總是會去除前導空格; 據我所知,沒有(推薦的)方法可以改變它。

一種解決方法是使用非空白字符來指示格式化文本的開頭,然后在讀取文件后將其刪除。 例如,

[main]
key_one   =| hello
           |   this
           |     is
           |       indented

然后在你的腳本中

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)

產生

$ python3 tmp.py
 hello
   this
     is
       indented

該值在=之后立即開始(我將您的第一行向上移動,假設您真的不希望該值以換行符開頭)。 解析器保留|之后的任何非尾隨空格| , 作為每行的第一個非空白字符。 re.sub將刪除初始| 從每一行,留下所需的縮進多行字符串作為結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM