我怎样才能打印在Pythonstring文字花括号字符,也使用它的格式?
x = " \{ Hello \} {0} " print x.format(42)
给我: Key Error: Hello\\
我想打印输出: {Hello} 42
您需要加倍{{
和}}
:
>>> x = " {{ Hello }} {0} " >>> print x.format(42) ' { Hello } 42 '
以下是格式string语法的Python文档的相关部分:
格式string包含花括号
{}
包围的“replace字段”。 任何不包含在大括号中的东西都被认为是文本文本,它被不变地复制到输出中。 如果您需要在字面文本中包含大括号字符,则可以通过加倍{{
和}}
来使其转义。
你通过加倍括号来逃避它。
例如:
x = "{{ Hello }} {0}" print x.format(42)
尝试这样做:
x = " {{ Hello }} {0} " print x.format(42)
尝试这个:
x = "{{ Hello }} {0}"
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时,出现“逃避括号”问题是很常见的。
我build议这样做:
import json data = "1,2" mydict = {"all": "false", "selected": data} json.dumps(mydict)
它比替代scheme更清洁,即:
'{{"all": false, "selected": "{}"}}'.format(data)
当JSONstring比示例更复杂时,使用json
库是绝对可取的。
虽然不是更好,但仅供参考,您也可以这样做:
>>> x = '{}Hello{} {}' >>> print x.format('{','}',42) {Hello} 42
例如当有人想要打印{argument}
时,它可能是有用的。 它可能比'{{{}}}'.format('argument')
更可读'{{{}}}'.format('argument')
请注意,在Python 2.7之后,您省略了参数位置(例如{}
而不是{0}
)
如果你要这么做的话,定义一个效用函数可以让你使用任意的大括号replace,比如
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的string或两个string的迭代(对于多字符分隔符)。
原因是, {}
是.format()
的语法,所以在你的情况下.format()
不能识别{Hello}
所以它抛出一个错误。
您可以使用双花括号{{}}覆盖它,
x = " {{ Hello }} {0} "
要么
尝试%s
的文本格式,
x = " { Hello } %s" print x%(42)
对我来说最好的解决scheme就是使用这个'{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){} } }
如果必须在参数字典的键值或格式方法列表中加上大括号,请尝试以下操作:
>>> "{o}Hello {a}{c}".format(**{"o":"{","c":"}","a":42}) '{Hello 42}'