从 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
该值紧接在 =
之后开始(我将您的第一行向上移动,假设您真的不希望该值以换行符开头)。解析器将 after|
后的任何非尾随空白字符保留为每行的第一个非空白字符。 re.sub
将从每行中删除初始 |
,留下所需的缩进多行字符串作为结果。
我有这样的配置文件:
[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
该值紧接在 =
之后开始(我将您的第一行向上移动,假设您真的不希望该值以换行符开头)。解析器将 after|
后的任何非尾随空白字符保留为每行的第一个非空白字符。 re.sub
将从每行中删除初始 |
,留下所需的缩进多行字符串作为结果。