どのように私はPythonでのConfigParserから読み込まれたときにインデントが複数行の値に含まれるように得ることができますか?

ジョナサン・アレン・グラント:

私はこのようないくつかの設定ファイルを持っています:

[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最初に削除され|、結果として所望のインデント複数行の文字列を残して、各ラインから。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=372964&siteId=1