Python中使用.format时如何转义花括号({})字符

Python中使用.format时如何转义花括号({})字符

技术背景

在Python中,str.format() 方法用于格式化字符串,它使用花括号 {} 作为占位符。但当我们需要在字符串中包含花括号字符本身时,就会与格式化语法冲突,因此需要对花括号进行转义。

实现步骤

使用 .format() 方法时

在使用 str.format() 方法时,要转义花括号,只需将单个花括号 {} 替换为双花括号 {{` 或 `}}

示例代码:

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

输出结果:

1
{ Hello } 42

Python 3.6+ 使用 f - 字符串时

在 Python 3.6 及更高版本中,可以使用 f - 字符串进行字符串格式化。同样,需要转义花括号时,使用双花括号 {{` 或 `}}

示例代码:

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

输出结果:

1
{Hello} 42

处理 JSON 字符串时

当处理 JSON 字符串时,使用 json 库是更好的选择,它可以避免手动处理花括号转义的复杂性。

示例代码:

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

输出结果:

1
{"all": "false", "selected": "1,2"}

核心代码

基本转义示例

1
2
3
4
5
6
7
8
9
10
11
12
13
# 使用 .format() 方法
x = "{{ Hello }} {0}"
print(x.format(42))

# 使用 f - 字符串
n = 42
print(f" {{Hello}} {n} ")

# 处理 JSON 字符串
import json
data = "1,2"
mydict = {"all": "false", "selected": data}
print(json.dumps(mydict))

自定义转义函数示例

1
2
3
4
5
6
7
8
9
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

print(custom_format('{{[cmd]} process 1}', brackets='[]', cmd='firefox.exe'))

最佳实践

  • 简单场景:如果只是简单的字符串格式化且需要包含花括号,使用双花括号转义是最简单直接的方法。
  • JSON 处理:当处理 JSON 字符串时,优先使用 json 库,它可以确保 JSON 字符串的正确性,避免手动转义带来的错误。
  • 复杂场景:如果需要频繁处理包含花括号的字符串格式化,可以考虑自定义函数,提高代码的可维护性。

常见问题

花括号数量问题

在一些复杂的格式化需求中,可能会混淆花括号的数量。例如,要在字符串中保留两个花括号,可能需要更多的花括号进行转义。

示例代码:

1
2
myvar = 'test'
print("{{{{{0}}}}}".format(myvar))

输出结果:

1
{{test}}

与其他格式化方法混用

不要在同一个字符串中混用不同的格式化方法,这样会使代码难以理解和维护。例如,不要同时使用 % 格式化和 str.format() 方法。


Python中使用.format时如何转义花括号({})字符
https://119291.xyz/posts/2025-04-14.python-string-formatting-escape-curly-braces/
作者
ww
发布于
2025年4月14日
许可协议