python大括号_如何在python字符串中打印文字大括号字符并在其上使用.format?

如何在python字符串中打印文字大括号字符并在其上使用.format?

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

print x.format(42)

给我:{Hello} 42

我想打印输出:{Hello} 42

10个解决方案

1382 votes

你需要加倍{}和{{:

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

>>> print x.format(42)

' { Hello } 42 '

以下是格式字符串语法的Python文档的相关部分:

格式字符串包含由大括号{}包围的“替换字段”。大括号中未包含的任何内容都被视为文本文本,它将不加改变地复制到输出中。 如果您需要在文字文本中包含大括号字符,则可以通过加倍来转义它:{{和}}。

Greg Hewgill answered 2018-12-17T04:59:05Z

55 votes

你通过加倍括号来逃避它。

例如:

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

print x.format(42)

Kamil Kisiel answered 2018-12-17T04:59:29Z

24 votes

试着这样做:

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

print x.format(42)

DNR answered 2018-12-17T04:59:48Z

21 votes

试试这个:

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

pajton answered 2018-12-17T05:00:12Z

21 votes

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时出现“逃避大括号”问题是很常见的。

我建议这样做:

import json

data = "1,2"

mydict = {"all": "false", "selected": data}

json.dumps(mydict)

它比替代品更清洁,它是:

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

当JSON字符串比示例更复杂时,使用json库肯定是更可取的。

twasbrillig answered 2018-12-17T05:00:49Z

14 votes

Python 3.6+(2017)

在最近的Python版本中,可以使用f-strings(另请参阅PEP498)。

使用f-strings,应该使用双{{或}}

n = 42

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

产生所需的

{Hello} 42

如果您需要在括号中解析表达式而不是使用文字文本,则需要三组括号:

hello = "HELLO"

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

产生

{hello}

divenex answered 2018-12-17T05:01:31Z

10 votes

虽然没有更好,仅供参考,您也可以这样做:

>>> x = '{}Hello{} {}'

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

{Hello} 42

它可能是有用的,例如当有人想要打印{}.它可能比{0}更具可读性

请注意,在Python 2.7之后省略了参数位置(例如{}而不是{0})

George Aprilis answered 2018-12-17T05:02:00Z

5 votes

如果你要做很多事情,最好定义一个实用函数,它可以让你使用任意的替代支撑,比如

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的字符串或两个字符串的可迭代(对于多字符分隔符)。

tvt173 answered 2018-12-17T05:02:24Z

1 votes

原因是,%s的语法是.format()所以在你的情况下.format()无法识别{Hello}所以它抛出了一个错误。

您可以使用双花括号{{}}覆盖它,

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

要么

试试%s进行文本格式化,

x = " { Hello } %s"

print x%(42)

Mohideen ibn Mohammed answered 2018-12-17T05:02:57Z

-6 votes

如果必须在参数字典的键值或格式方法列表周围放置大括号,请尝试以下操作:

>>> "{o}Hello {a}{c}".format(**{"o":"{","c":"}","a":42})

'{Hello 42}'

acacia answered 2018-12-17T05:03:17Z

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要将字符串括号内的值变成变量可赋值,可以使用Python的eval()函数。eval()函数可以将字符串作为表达式来求值,并返回结果。 假设你有一个变量名为`var`,并且你想在字符串`'tr[i]'`替换括号内的值为变量`var`的值,可以按照以下步骤进行: ``` # 假设 var = 3 var = 3 s = 'tr[i]' s = s.replace('[i]', '[{}]') # 将字符串的 '[i]' 替换成 '[{}]' s = s.format(var) # 使用.format()方法将变量var的值替换到字符串的 {} ``` 这将产生字符串`'tr[3]'`,其`3`是变量`var`的值。现在你可以使用eval()函数将这个字符串作为表达式来求值: ``` value = eval(s) ``` 这将使变量`value`被赋值为`tr[3]`所表示的值。但是需要注意的是,使用eval()函数存在一定的安全风险,因为它可以执行任意的Python代码。因此,应该谨慎使用,并确保不会执行来自不受信任的来源的代码。 ### 回答2: Python可以使用eval()函数实现将字符串的括号内的值变成变量可赋值。 通过eval()函数,可以将字符串的表达式转化为有效的Python代码,并运行该代码。在这种情况下,我们可以将字符串'tr[i]'的'i'作为变量,并进行赋值操作。 具体的实现步骤如下: 1. 定义一个变量'tr',如:tr = [1, 2, 3, 4] 2. 定义一个字符串,如:s = 'tr[i]' 3. 将字符串的变量名'i'替换为实际的值,如:s = s.replace('i', str(i)) 4. 使用eval()函数,将字符串转化为有效的Python代码,并执行赋值操作,如:eval(s) = 2 通过以上步骤,即可实现将字符串'tr[i]'括号内的值变成变量可赋值的效果。最终,变量'tr'的第i个元素的值将会被赋值给eval(s)。 需要注意的是,在使用eval()函数时,要确保字符串的代码是安全的,避免可能的安全风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值