python - मैं पाइथन स्ट्रिंग में शाब्दिक घुंघराले-ब्रेस वर्णों को कैसे मुद्रित कर सकता हूं और इसका उपयोग भी कर सकता हूं?




string format (8)

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

मुझे देता है: Key Error: Hello\\

मैं आउटपुट प्रिंट करना चाहता हूं: {Hello} 42


आप ब्रेसिज़ को दोगुना करके बचते हैं।

उदाहरण के लिए:

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

आपको {{ और }} को दोगुना करने की आवश्यकता है:

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

प्रारूप स्ट्रिंग वाक्यविन्यास के लिए पायथन दस्तावेज़ का प्रासंगिक भाग यहां दिया गया है:

प्रारूप तारों में घुंघराले ब्रेसिज़ {} घिरा "प्रतिस्थापन फ़ील्ड" होता है। ब्रेसिज़ में निहित कुछ भी शाब्दिक पाठ नहीं माना जाता है, जिसे आउटपुट में अपरिवर्तित प्रतिलिपि बनाई जाती है। यदि आपको शाब्दिक पाठ में एक ब्रेस चरित्र शामिल करने की आवश्यकता है, तो इसे दोगुना करके बचाया जा सकता है: {{ और }}


ऐसा करने का प्रयास करें:

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

ओपी ने यह टिप्पणी लिखी:

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 स्ट्रिंग उदाहरण से अधिक जटिल हो जाती है।


मेरे लिए सबसे अच्छा समाधान इस '{ob} Hello {cb} 42'.format(ob='{',cb='}')

कारण यह है कि क्यों नीचे की तरह कुछ प्रिंट करने के लिए स्वीकृत उत्तर का उपयोग कर शुभकामनाएं।

a='Header'
ob = '{'
cb = '}' 


str = """
import {a} from '../actions/{a}';

class {a} {ob}
  constructor() {ob}
  {cb}
  somefuncSuccess(){ob}
    if(true){ob}{cb}
  {cb}
{cb}
"""
str = str.format(a=a,ob=ob, cb=cb)
print(str)

आउटपुट:

import Header from '../actions/Header';

    class Header {
      constructor() {
      }
      somefuncSuccess(){
         if(true){}
      }
    }

यदि आप इसे बहुत कुछ करने जा रहे हैं, तो एक उपयोगिता फ़ंक्शन को परिभाषित करना अच्छा हो सकता है जो आपको इसके बजाय मनमाने ढंग से ब्रेस विकल्प का उपयोग करने देगा, जैसे

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 की एक स्ट्रिंग या दो स्ट्रिंग्स (मल्टी-कैरेक्टर डिलीमीटर के लिए) के दोहराए जाने वाले ब्रैकेट के साथ काम करेगा।


हालांकि संदर्भ के लिए, बेहतर नहीं है, आप यह भी कर सकते हैं:

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

यह उदाहरण के लिए उपयोगी हो सकता है जब कोई {argument} प्रिंट करना चाहता है। यह '{{{}}}'.format('argument') से अधिक पठनीय हो सकता है '{{{}}}'.format('argument')

ध्यान दें कि आप पायथन 2.7 के बाद तर्क पदों (जैसे {} बजाय {} छोड़ देते हैं


पायथन 3.6 (2017)

पायथन के वर्तमान संस्करण में f-strings उपयोग करेगा ( PEP498 9 PEP498 देखें)।

एफ-तारों के साथ भी डबल {{ या }} उपयोग करना चाहिए

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

वांछित पैदा करता है

 {Hello} 42




curly-braces