余分な中括弧を含む文字列をフォーマットする

私はPython 3で読み込みたいLaTeXファイルを用意して、結果の文字列に値をフォーマットします。何かのようなもの:

...
\textbf{REPLACE VALUE HERE}
...

しかし、文字列フォーマットを行う新しい方法は {val} 表記を使用し、LaTeXドキュメントなので、これを行う方法を理解できませんでした。余分な { } 文字を入力します。

私は次のようなものを試しました:

'\textbf{This and that} plus \textbf{{val}}'.format(val='6')

しかし私は得る

KeyError: 'This and that'
13

1 答え

私が実際にやっている方法1:代わりに文字列テンプレートを使用する。

>>> from string import Template
>>> Template(r'\textbf{This and that} plus \textbf{$val}').substitute(val='6')
'\\textbf{This and that} plus \\textbf{6}'

方法2:追加の中括弧を追加します。これは正規表現を使って行うことができます。

>>> r'\textbf{This and that} plus \textbf{val}'.format(val='6')
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'This and that'
>>> r'\textbf{{This and that}} plus \textbf{{{val}}}'.format(val='6')
'\\textbf{This and that} plus \\textbf{6}'

(可能な)方法3:カスタムのstring.Formatterを使用します。私は自分自身でこれを行う理由はなかったので、私は助けになるほどの細部を知らない。

20
追加された
string.Templateが将来廃止されるかどうかの手掛かりはありますか?新しいpython 3 {}フォーマットにはこれが含まれているようです。 LaTeX編集では、テンプレートははるかに便利です。
追加された 著者 levesque,
正規表現を使用するのではなく、余分な中カッコを追加する方がよいでしょう。 str.translate です。指定された文字列を修正するには、 goodstring = badstring.translate( goodstring = badstring.translate() unformatter = str.maketrans({'{' {''} '}}) str ではなく、 unicode でのみ動作します) code> unicode は1-n変換マッピングをサポートしています)。
追加された 著者 ShadowRanger,
@levesque:それは、(保留中の)3.4で廃止されたものではなく、 {} とは別の機能を提供しますので、しばらくお待ちしています。
追加された 著者 DSM,