ジョナサン・アレン・グラント:
私はこのようないくつかの設定ファイルを持っています:
[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を得ることができますか?
chepner:
パーサ自体は常に先頭の空白を取り除くことができます。私の知る限り、それを変更する(推奨)方法はありません。
この問題を回避するには、ファイルを読んだ後ことを取り除く、その後、あなたのフォーマットされたテキストの先頭を示すために、非空白文字を使用することです。例えば、
[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
最初に削除され|
、結果として所望のインデント複数行の文字列を残して、各ラインから。