පයිතන් නූල්වල වචනාර්ථයෙන් කැරලි-වරහන් අක්ෂර මුද්‍රණය කර එය මත ආකෘති භාවිතා කරන්නේ කෙසේද?


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

මට ලබා දෙයි: Key Error: Hello\\

මට ප්‍රතිදානය මුද්‍රණය කිරීමට අවශ්‍යයි: {Hello} 42


1
මෙයද බලන්න: stackoverflow.com/questions/35574349
dreftymac

11
වරහන් දෙගුණ කිරීමෙන් වළකින්න ( {{ }}) භාවිතා කරන්න string.Template. එහිදී ඔබ පෝරමයේ හඳුනාගැනීම් ආදේශ කරයි $foo(LaTeX කේතය ජනනය කිරීම සඳහා පහසුය).
අයොනිස් ෆිලිපිඩිස්

වරහන් දෙගුණ කිරීමෙන් වළක්වා ගැනීමට කැමති අයට සහ ඔවුන්ගේ පයිතන් ව්‍යාපෘති සඳහා තවත් යැපීමක් එක් කිරීමට අකමැති අයට , පරිශීලක-නිර්වචනය කළ අභිරුචි ස්ථානගත කිරීම් පරිසීමක සින්ටැක්ස් වලට ඉඩ දීමෙන් මෙම ගැටළුව නිශ්චිතවම විසඳන ජින්ජා 2 ද ඇත.
dreftymac

Answers:


2133

ඔබ දෙගුණ කළ යුතු {{අතර }}:

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

හැඩතල සින්ටැක්ස් සඳහා පයිතන් ප්‍රලේඛනයේ අදාළ කොටස මෙන්න :

ආකෘති නූල් වල කැරලි වරහන් වලින් වට වූ “ආදේශන ක්ෂේත්‍ර” අඩංගු වේ {}. වරහන් වල අඩංගු නොවන ඕනෑම දෙයක් වචනාර්ථයෙන් පෙළ ලෙස සලකනු ලබන අතර එය ප්‍රතිදානයට නොවෙනස්ව පිටපත් වේ. ඔබට වචනයේ පරිසමාප්ත අර්ථයෙන්ම ඇතුළත් කිරීමට අවශ්‍ය නම්, එය දෙගුණ කිරීමෙන් ගැලවිය හැකිය: {{සහ }}.


275
එබැවින් ඔබට "{42 print" මුද්‍රණය කිරීමට අවශ්‍ය නම්, ඔබ භාවිතා කරනු ඇත "{{{0}}}".format(42)!
හියුස්

8
ඔබට තනි කැරලි වරහනක් අවශ්‍ය නම් කුමක් කළ යුතුද? "{ something { } {value}".format(42)වැඩ කරන්නේ නැහැ.
AJP

14
"{{". ආකෘතිය () සහ "}}". ආකෘතිය () තනි කැරලි වරහන් මුද්‍රණය කරන්න. ඔබේ උදාහරණයේ: "{{යමක් {{}} {0}" මුද්‍රණය කරන්න. ආකෘතිය (42) "{යමක් {} 42" මුද්‍රණය කරයි.
මාර්ක් වීසර්

2
වෙන්නේ මොනවාද {0}අදහස්?
කෝඩි බග්ස්ටයින්

6
M ඉම්රේ: {0}යන්නට පළමු තර්කය යොමු .format()කරයි. ඔබ {0} {1} {2}එකම තර්ක සංඛ්‍යාවක් ලබා දෙන තාක් කල් ඔබට එකකට වඩා වැඩි අගයක් මුද්‍රණය කළ හැකිය .format(). පුළුල් උදාහරණ සඳහා docs.python.org/library/string.html#format-examples බලන්න .
ග්‍රෙග් හෙව්ගිල්


67

පයිතන් 3.6+ (2017)

පයිතන්ගේ මෑත සංස්කරණ වලදී යමෙක් f-string භාවිතා කරයි ( PEP498 ද බලන්න ).

F-string සමඟ යමෙකු දෙවරක් {{හෝ භාවිතා කළ යුතුය}}

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

අපේක්ෂිත නිෂ්පාදනය කරයි

 {Hello} 42

වචනාර්ථයෙන් පෙළ භාවිතා කිරීම වෙනුවට වරහන් තුළ ප්‍රකාශනයක් නිරාකරණය කිරීමට ඔබට අවශ්‍ය නම් ඔබට වරහන් තුනක් අවශ්‍ය වේ:

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

නිෂ්පාදනය කරයි

{hello}

1
සිට my_greet = "HELLO"ඔබ විසින් ලබා ගත හැකි {hello}සමග, වරහන් හුදෙක් 2 කට්ටල භාවිතා, ප්රතිදාන ලෙස print(f"{ {my_greet.lower()} }"). වරහන් අතර ඉඩක් තබන්න.
yrnr

48

OP මෙම අදහස ලිවීය:

මම මේ වගේ සමහර අරමුණු සඳහා කුඩා JSON එකක් ආකෘතිකරණය කිරීමට උත්සාහ කළා: '{"all": false, "selected": "{}"}'.format(data)එවැනි දෙයක් ලබා ගැනීමට{"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 නූල වඩාත් සංකීර්ණ වූ විට පුස්තකාලය භාවිතා කිරීම වඩාත් සුදුසුය.


1
ආමෙන්! එය වැඩිපුර වැඩක් සේ පෙනේ, නමුත් කොන කැපීමට එදිරිව පුස්තකාල විසින් කළ යුතු දේ කිරීමට පුස්තකාල භාවිතා කිරීම ... වඩා හොඳ දේ සඳහා උපකාරී වේ.
Kaolin Fire

1
නමුත් පයිතන් වස්තුවක යතුරු අනුපිළිවෙල සහතික නොවේ ... තවමත්, JSON පුස්තකාලය JSON ආකාරයකින් අනුක්‍රමිකකරණය කිරීම සහතික කර ඇත.
wizzwizz4

2
wizzwizz4: හොඳ කරුණක්. පයිතන් 3.6 සිට ශබ්ද කෝෂ ඇතුළත් කිරීම ඇණවුම් කර ඇති බැවින් එය ගැටළුවක් නොවනු ඇත. 2.7 ත් 3.5 ත් අතර පයිතන් අනුවාදයන්ට එකතු කිරීමේ පුස්තකාලයෙන් ඕඩර්ඩෙක්ට් භාවිතා කළ හැකිය.
twasbrillig



15

වඩා හොඳ නොවුනත්, යොමු කිරීම සඳහා පමණක් ඔබට මෙය කළ හැකිය:

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

යමෙකුට මුද්‍රණය කිරීමට අවශ්‍ය වූ විට එය ප්‍රයෝජනවත් වේ {argument}. එය වඩා කියවිය හැකි ය'{{{}}}'.format('argument')

පයිතන් 2.7 න් පසු ඔබ තර්ක ස්ථාන (උදා {}වෙනුවට {0}) අතහැර දමා ඇති බව සලකන්න


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 දිගකින් හෝ නූල් දෙකකින් (බහු-අක්ෂර පරිසීමක සඳහා) නැවත ක්‍රියා කළ හැකි බව සලකන්න.


ඒ ගැනත් සිතුවා. ඇත්ත වශයෙන්ම, එය ද ක්‍රියාත්මක වන අතර ඇල්ගොරිතම සරල ය. එහෙත්, ඔබට මේ වගේ පෙළ ගොඩක් ඇති බව සිතන්න, ඔබට අවශ්‍ය වන්නේ එය මෙහි සහ එහි පරාමිතිකරණය කිරීමට ය. ඔබ ආදාන නූලක් සාදන සෑම අවස්ථාවකම ඔබට එම වරහන් සියල්ලම අතින් ප්‍රතිස්ථාපනය කිරීමට අවශ්‍ය නොවනු ඇත. ඔබට අවශ්‍ය වන්නේ ඔබේ පරාමිතිකරණ මෙතැනින් සහ අතහැර දැමීමටයි. මෙම අවස්ථාවේ දී, මෙම ක්‍රමය පරිශීලක දෘෂ්ටිකෝණයකින් සිතීමට හා ඉටු කිරීමට පහසු යැයි මම සිතමි. පහසු දේ මත පදනම්ව ඔබේ පරිසීමකය අත්තනෝමතික ලෙස තෝරා ගැනීමට සමාන හැකියාවන් ඇති ලිනක්ස්ගේ 'sed' විධානයෙන් මා ආශ්වාදයක් ලැබීය.
tvt173

කෙටියෙන් කිවහොත්, සෑම විටම භාවිතා කිරීම $ in හි වේදනාවක් වීමට වඩා උපයෝගිතා ක්‍රියාකාරිත්වය ටිකක් සංකීර්ණ වීමට මම කැමැත්තෙමි. මම ඔබේ යෝජනාව වරදවා වටහා ගත්තා නම් කරුණාකර මට දන්වන්න.
tvt173

මම ඉදිරියට ගොස් මගේ public.lab අවකාශයට කෙටි නිරූපණයක් එක් කළෙමි github.com/dreftymac/public.lab/blob/master/topic/python/…
dreftymac

5

ඔබට නූල් වල කරකැවෙන වරහන් දෙකක් තබා ගැනීමට අවශ්‍ය නම්, විචල්යයේ සෑම පැත්තකින්ම කැරලි වරහන් 5 ක් අවශ්ය වේ.

>>> myvar = 'test'
>>> "{{{{{0}}}}}".format(myvar)
'{{test}}'

1
F-string භාවිතා කරන අය සඳහා, 5 වෙනුවට දෙපස කැරලි වරහන් 4 ක් භාවිතා කරන්න
TerryA

4

පෙර සැකසූ 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")

කාර්ය සාධනය ගැටලුවක් නොවේ නම් සිදු කරන ලද කාර්යය ලබා ගනී.


සුළු වෙනස් කිරීම් අවශ්‍ය වන පරිදි පවතින කේතයට ඒකාබද්ධ වීමට සරල හා අලංකාරයි. ස්තූතියි!
තීරුව 01

1

හේතුව නම්, ඔබේ නඩුවේ {}වාක්‍ය ඛණ්ඩය හඳුනා නොගැනීම නිසා එය දෝෂයක් ඇතිවිය..format().format(){Hello}

ද්විත්ව වක්‍ර වරහන් {{} using භාවිතා කිරීමෙන් ඔබට එය අභිබවා යා හැකිය.

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

හෝ

%sපෙළ හැඩතල ගැන්වීමට උත්සාහ කරන්න ,

x = " { Hello } %s"
print x%(42)  

0

පෙළ මුද්‍රණය කිරීමට උත්සාහ කරන විට මම මෙම ගැටළුවට බාධා කළෙමි. මම මෙම පිළිතුර දීර් extend කර නම් කරන ලද ආදේශන ක්ෂේත්‍ර භාවිතා කරමි:

රූප විස්තරය මෙහි ඇතුළත් කරන්නලැටෙක්ස් හි වැනි දර්ශක සහිත බහු විචල්‍ය විචල්‍යයන්ගේ නිෂ්පාදනයක් මුද්‍රණය කිරීමට ඔබට අවශ්‍ය යැයි කියමු. $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))

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

-1

ඔබ කේත නූල් අන්තර්ග්‍රහණය කිරීමට උත්සාහ කරන විට , පයිතන් සඳහා අංග සම්පූර්ණ අච්චු එන්ජිමක් වන ජින්ජා 2 භාවිතා කිරීමට මම යෝජනා කරමි , එනම්:

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))

අනෙක් පිළිතුරු සමූහය යෝජනා කරන පරිදි රැලි වරහන් අනුපිටපත් කිරීමට ඔබට බල කෙරෙන්නේ නැත


-2

F-string හි රැලි සහිත වරහන් වලින් ගැලවීමට ගැලවීමේ අනුක්‍රම භාවිතා කරන්න. උදා: මුද්‍රණය කරන්න (f '{a = {1}}')


1
OP විසින් ගැලවීමේ අනුපිළිවෙල භාවිතා කළ අතර ඒවා ක්‍රියාත්මක නොවන බව වාර්තා විය. මෙහි උදාහරණය සම්පාදනය නොකරයි. මෙම පිළිතුර කලින් පළ කළ පිළිතුරු පහළොවට කිසිදු වටිනාකමක් එක් නොකරයි.
ඩෙනිස් ස්පරෝ

-3

අමු නූල් ක්‍රමය භාවිතා කිරීමෙන් ඔබට මෙය කළ හැකිය.

# to print '{I am inside braces}'
print(r'{I am inside braces}')

හෙලෝ! ඔබට එය නැවත පරීක්ෂා කිරීමට අවශ්‍ය විය හැකිය; පයිතන් 3.7 මුද්‍රණය \{I am inside braces\}.
ටියෝඩර්

1
E ටියෝඩර් ඒ ගැන කණගාටුයි. දැන් මම මෙය අමු නූල් ලෙස මුද්‍රණය කිරීමෙන් නිවැරදි කළෙමි.
හර්ෂ් අගර්වාල්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.