2035
x = " \{ Hello \} {0} "
print(x.format(42))

私に与える:Key Error: Hello\\

出力を印刷したい:{Hello} 42

4

25 に答える 25

2822

とを2倍にする必要があり{{ます}}

>>> x = " {{ Hello }} {0} "
>>> print(x.format(42))
' { Hello } 42 '

フォーマット文字列構文に関するPythonドキュメントの関連部分は次のとおりです。

フォーマット文字列には、中括弧で囲まれた「置換フィールド」が含まれています{}。中括弧に含まれていないものはすべてリテラルテキストと見なされ、変更されずに出力にコピーされます。リテラルテキストに中括弧文字を含める必要がある場合は、:{{とを2倍にすることでエスケープできます}}

于 2011-03-29T00:08:55.973 に答える
154

Python 3.6+(2017)

Pythonの最近のバージョンでは、f文字列を使用します(PEP498も参照)。

f-stringsでは、double{{または}}

n = 42  
print(f" {{Hello}} {n} ")

目的の

 {Hello} 42

リテラルテキストを使用する代わりに括弧内の式を解決する必要がある場合は、3セットの括弧が必要になります。

hello = "HELLO"
print(f"{{{hello.lower()}}}")

を生成します

{hello}
于 2017-12-21T11:12:13.790 に答える
99

中かっこを2倍にすることでそれを回避します。

例えば:

x = "{{ Hello }} {0}"
print(x.format(42))
于 2011-03-29T00:08:22.667 に答える
61

OPはこのコメントを書きました:

'{"all": false, "selected": "{}"}'.format(data)私は次のようないくつかの目的のために小さなJSONをフォーマットしようとしていました:{"all": false, "selected": "1,2"}

JSONを処理するときに、「中括弧のエスケープ」の問題が発生することはよくあることです。

私はこれを行うことをお勧めします:

import json
data = "1,2"
mydict = {"all": "false", "selected": data}
json.dumps(mydict)

これは、代替案よりもクリーンです。

'{{"all": false, "selected": "{}"}}'.format(data)

jsonJSON文字列が例よりも複雑になる場合は、ライブラリを使用することをお勧めします。

于 2016-06-06T18:59:09.003 に答える
32

これを試して:

x = "{{ Hello }} {0}"

于 2011-03-29T00:08:20.420 に答える
29

これを試してみてください:

x = " {{ Hello }} {0} "
print x.format(42)
于 2011-03-29T00:08:31.270 に答える
17

{文字列を次の文字でフォーマットしたい}

あなたはそれらを2倍にする必要があります。

{とのフォーマットf'{{'_}f'}}'

それで :

name = "bob"
print(f'Hello {name} ! I want to print }} and {{')

出力:

こんにちはボブ!}と{を印刷したい

于 2021-09-24T20:37:44.870 に答える
16

これ以上良いわけではありませんが、参考のために、これを行うこともできます。

>>> x = '{}Hello{} {}'
>>> print x.format('{','}',42)
{Hello} 42

たとえば、誰かが印刷したい場合に便利です{argument}。多分それはより読みやすいです'{{{}}}'.format('argument')

Python 2.7以降では、引数の位置を(たとえば{}ではなく)省略していることに注意してください。{0}

于 2015-11-05T11:22:02.420 に答える
9

文字列に2つの中括弧を保持する必要がある場合は、変数の両側に5つの中括弧が必要です。

>>> myvar = 'test'
>>> "{{{{{0}}}}}".format(myvar)
'{{test}}'
于 2019-06-24T19:55:06.450 に答える
7

f-文字列(python 3)

f-magicを適用する文字列の部分にのみf-stringsを使用し、リテラルで「unsafe」特殊文字を含む可能性のあるすべてのものに通常の(ダム)文字列を使用することで、中括弧を2倍にする必要がなくなります。文字。複数の文字列を積み重ねるだけで、Pythonに文字列の結合を実行させます。

number = 42
print(" { Hello }"  
f" {number} " 
"{ thanks for all the fish }")

### OUTPUT:
{ Hello } 42 { thanks for all the fish }

注:文字列間の改行は必要ありません。読みやすくするために追加しただけです。以下に示すように、上記のコードを書くこともできます。

⚠️警告:これにより、目を傷つけたり、めまいを起こしたりする可能性があります。

print("{Hello}"f"{number}""{thanks for all the fish}")
于 2021-07-06T21:55:43.420 に答える
6

これを頻繁に行う場合は、代わりに任意のブレース置換を使用できるユーティリティ関数を定義するとよいでしょう。

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つのストリングの反復可能(複数文字の区切り文字の場合)のいずれかで機能することに注意してください。

于 2016-11-29T23:43:21.207 に答える
5

事前にフォーマットされたJSONに文字列を挿入したかったので、最近これに遭遇しました。私の解決策は、次のようなヘルパーメソッドを作成することでした。

def preformat(msg):
    """ allow {{key}} to be used for formatting in text
    that already uses curly braces.  First switch this into
    something else, replace curlies with double curlies, and then
    switch back to regular braces
    """
    msg = msg.replace('{{', '<<<').replace('}}', '>>>')
    msg = msg.replace('{', '{{').replace('}', '}}')
    msg = msg.replace('<<<', '{').replace('>>>', '}')
    return msg

次に、次のようなことを行うことができます。

formatted = preformat("""
    {
        "foo": "{{bar}}"
    }""").format(bar="gas")

パフォーマンスが問題にならない場合は、ジョブを完了させます。

于 2019-12-17T09:37:07.457 に答える
5
key = "FOOBAR"
print(f"hello {{{key}}}")

出力

hello {FOOBAR}

誰かがfstringsを使用して中括弧内に何かを印刷したい場合に備えて。

于 2021-12-23T17:49:33.240 に答える
4

私はこのパーティーに途方もなく遅れています。次のように、置換要素にブラケットを配置することに成功しています。

print('{0} {1}'.format('{hello}', '{world}'))

印刷する

{hello} {world}

厳密に言えば、これはOPが求めているものではありません。これは、フォーマット文字列に中括弧が必要なためですが、これは誰かに役立つ可能性があります。

于 2020-12-11T19:05:43.623 に答える
2

fstring値の挿入を防ぐために、double{{}}を使用しました。

たとえば、Postgres UPDATEステートメントを使用して、{}の式を使用して配列をキャプチャする整数配列列を更新します。

ポート='{100,200,300}'

fstringsで、

ports = [1,2,3]

query = f"""
   UPDATE table SET ports = '{{{ports}}}' WHERE id = 1
"""

実際のクエリステートメントは、

UPDATE table SET ports = '{1,2,3}'

これは有効なpostgressatementです

于 2021-06-15T02:14:00.410 に答える
2

中括弧の片面だけを印刷する場合:

a=3
print(f'{"{"}{a}')
>>> {3
于 2021-07-25T15:35:22.067 に答える
1

理由は、{}の構文である.format()ため、あなたの場合.format()は認識されない{Hello}ため、エラーがスローされました。

二重中括弧{{}}を使用してオーバーライドできます。

x = " {{ Hello }} {0} "

また

%sテキストの書式設定を試してください、

x = " { Hello } %s"
print x%(42)  
于 2017-06-27T12:40:46.310 に答える
1

「引用符の壁」を使用して、フォーマットされた文字列部分を通常の文字列部分から分離できます。

から:

print(f"{Hello} {42}")

print("{Hello}"f" {42}")

より明確な例は

string = 10
print(f"{string} {word}")

出力:

NameError: name 'word' is not defined

次に、次のように引用ウォールを追加します。

string = 10
print(f"{string}"" {word}")

出力:

10 {word}
于 2020-12-31T21:13:07.180 に答える
0

テキストを印刷しようとしたときにこの問題に遭遇しました。テキストをコピーしてLaTeXドキュメントに貼り付けることができます。私はこの答えを拡張し、名前付き置換フィールドを利用します。

のようなインデックスを持つ複数の変数の積を出力したいとします ここに画像の説明を入力してください。これは、LaTeXでは次のようになります$A_{ 0042 }*A_{ 3141 }*A_{ 2718 }*A_{ 0042 }$ 。次のコードは、名前付きフィールドを使用してジョブを実行し、多くのインデックスで読み取り可能な状態を維持します。

idx_mapping = {'i1':42, 'i2':3141, 'i3':2178 }
print('$A_{{ {i1:04d} }} * A_{{ {i2:04d} }} * A_{{ {i3:04d} }} * A_{{ {i1:04d} }}$'.format(**idx_mapping))
于 2019-11-19T18:56:35.610 に答える
-1

中括弧を1つだけ印刷する場合(たとえば{)、を使用でき{{ます。必要に応じて、文字列の後半に中括弧を追加できます。例えば:

>>> f'{{ there is a curly brace on the left. Oh, and 1 + 1 is {1 + 1}'
'{ there is a curly brace on the left. Oh, and 1 + 1 is 2'
于 2020-03-23T01:32:22.513 に答える
-1

フォーマット可能なf-stringテンプレート内に中括弧が必要な場合は、f-stringの中括弧のセット内に2つの中括弧を含む文字列を出力する必要があります。

css_template = f"{{tag}} {'{{'} margin: 0; padding: 0;{'}}'}"
for_p = css_template.format(tag="p")
# 'p { margin: 0; padding: 0;}'
于 2021-01-28T09:40:38.737 に答える
-1

または、ブラケット自体をパラメータ化するだけですか?おそらく非常に冗長です。

x = '{open_bracket}42{close_bracket}'.format(open_bracket='{', close_bracket='}') 
print(x)
# {42}
于 2021-04-21T17:10:30.807 に答える
-2

コード文字列を補間しようとしている場合は、Python用のフル機能のテンプレートエンジンであるjinja2を使用することをお勧めします。

from jinja2 import Template

foo = Template('''
#include <stdio.h>

void main() {
    printf("hello universe number {{number}}");
}
''')

for i in range(2):
    print(foo.render(number=i))

したがって、他の多くの回答が示唆しているように、中括弧を複製するように強制されることはありません

于 2020-04-02T11:00:05.710 に答える
-3

これを行うには、文字列の前に引用符なしで文字「r」を追加するだけで、生の文字列メソッドを使用できます。

# to print '{I am inside braces}'
print(r'{I am inside braces}')
于 2019-09-10T12:30:47.393 に答える
-4

エスケープシーケンスを使用して、f文字列の中括弧をエスケープします。例:print(f'{a = {1}}')

于 2020-06-22T21:54:20.227 に答える