Pertanyaan Bagaimana saya bisa mencetak karakter penjepit keriting literal dalam string python dan juga menggunakan format di atasnya?


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

memberi saya: Key Error: Hello\\

Saya ingin mencetak hasilnya: {Hello} 42


930
2018-03-29 00:04


asal


Jawaban:


Anda perlu menggandakan {{ dan }}:

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

Inilah bagian yang relevan dari Dokumentasi Python untuk sintaks string format:

String format berisi "ladang pengganti" dikelilingi oleh kurung kurawal {}. Apa pun yang tidak ada dalam kurung dianggap teks literal, yang disalin tidak berubah ke output. Jika Anda perlu menyertakan karakter penjepit dalam teks literal, itu bisa diloloskan dengan menggandakan: {{ dan }}.


1267
2018-03-29 00:08



Anda melarikan diri dengan menggandakan kawat gigi.

Misalnya:

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

52
2018-03-29 00:08



Coba lakukan ini:

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

24
2018-03-29 00:08



Coba ini:

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


20
2018-03-29 00:08



OP menulis komentar ini:

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"}

Sangat umum bahwa masalah "escaping braces" muncul ketika berhadapan dengan JSON.

Saya menyarankan melakukan ini:

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

Ini lebih bersih daripada alternatifnya, yaitu:

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

Menggunakan json perpustakaan pasti lebih disukai ketika string JSON menjadi lebih rumit daripada contoh.


19
2018-06-06 18:59



Meski tidak lebih baik, hanya untuk referensi, Anda juga bisa melakukan ini:

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

Ini bisa berguna misalnya ketika seseorang ingin mencetak {argument}. Ini mungkin lebih mudah dibaca daripada '{{{}}}'.format('argument')

Perhatikan bahwa Anda mengabaikan posisi argumen (mis. {} dari pada {0}) setelah Python 2.7


9
2017-11-05 11:22



Python 3.6 (2017)

Dalam versi Python saat ini yang akan digunakan f-string (Lihat juga PEP498).

Juga dengan f-string seseorang harus menggunakan dua kali lipat {{ atau }}

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

menghasilkan yang diinginkan

 {Hello} 42

7
2017-12-21 11:12



Jika Anda akan melakukan ini banyak, mungkin baik untuk mendefinisikan fungsi utilitas yang akan membiarkan Anda menggunakan pengganti penyangga sembarang sebagai gantinya, seperti

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}'

Perhatikan bahwa ini akan bekerja baik dengan tanda kurung menjadi string panjang 2 atau iterable dari dua string (untuk multi-karakter pembatas).


4
2017-11-29 23:43