x = " \{ Hello \} {0} "
print x.format(42)
私にくれ:Key Error: Hello\\
出力を印刷したいのですが{Hello} 42
{{
と}}
を2倍にする必要があります。
>>> x = " {{ Hello }} {0} "
>>> print x.format(42)
' { Hello } 42 '
フォーマット文字列の構文に関する Pythonドキュメントの関連部分は次のとおりです :
フォーマット文字列は、中括弧
{}
で囲まれた「置換フィールド」を含みます。中括弧に含まれていないものはすべてリテラルテキストと見なされ、そのまま出力にコピーされます。リテラルテキストに中括弧を含める必要がある場合は、{{
と}}
を2倍にすることでエスケープすることができます。
あなたは中括弧を2倍にすることによってそれを免れる。
例えば:
x = "{{ Hello }} {0}"
print x.format(42)
OPはこのコメントを書いた:
I was trying to format a small JSON for some purposes, like this: '{"all": false, "selected": "{}"}'.format(data) to get something like {"all": false, "selected": "1,2"}
JSONを扱うときに「ブレースのエスケープ」問題が発生することはごく一般的です。
こうすることをお勧めします。
import json
data = "1,2"
mydict = {"all": "false", "selected": data}
json.dumps(mydict)
それは代替手段よりもきれいです。
'{{"all": false, "selected": "{}"}}'.format(data)
JSON文字列が例よりも複雑になる場合は、json
ライブラリを使用することをお勧めします。
これをやってみてください。
x = " {{ Hello }} {0} "
print x.format(42)
これを試して:
x = "{{ Hello }} {0}"
参考までに、これ以上のことはできません。
>>> x = '{}Hello{} {}'
>>> print x.format('{','}',42)
{Hello} 42
たとえば、誰かが{argument}
を印刷したいときに便利です。おそらく'{{{}}}'.format('argument')
より読みやすいです。
Python 2.7以降では引数の位置を省略していることに注意してください(例:{}
の代わりに{0}
)
あなたがこれをたくさんやろうとしているなら、代わりに任意のブレース代用品を使うことを可能にする効用関数を定義するのは良いかもしれません。
def custom_format(string, brackets, *args, **kwargs):
if len(brackets) != 2:
raise ValueError('Expected two brackets. Got {}.'.format(len(brackets)))
padded = string.replace('{', '{{').replace('}', '}}')
substituted = padded.replace(brackets[0], '{').replace(brackets[1], '}')
formatted = substituted.format(*args, **kwargs)
return formatted
>>> custom_format('{{[cmd]} process 1}', brackets='[]', cmd='firefox.exe')
'{{firefox.exe} process 1}'
これは、大括弧が長さ2のストリング、または2つのストリングの反復可能文字(複数文字の区切り文字の場合)のどちらでも機能することに注意してください。
理由は、{}
は.format()
の構文なので、あなたの場合では.format()
は{Hello}
を認識しないのでエラーになります。
二重中括弧{{}}を使って上書きできます。
x = " {{ Hello }} {0} "
または
テキストフォーマットのために%s
を試してください、
x = " { Hello } %s"
print x%(42)
文字列に2つの中括弧を保持する必要がある場合は、変数の両側に5つの中括弧が必要です。
>>> myvar = 'test'
>>> "{{{{{0}}}}}".format(myvar)
'{{test}}'
String.Template()
を使用できます。
from string import Template
s = Template('$txt, $num')
s.substitute(txt='{Hello}', num='42 ')