如何在 Python 中将数据值插入字符串?

pythonserver side programmingprogramming更新于 2026/2/16 18:52:17

我们可以使用各种格式将数据值插入字符串。我们可以使用它来消除代码缺陷、生成报告、表单和其他输出。在本主题中,我们将看到三种格式化字符串的方法以及如何将数据值插入字符串。

Python 有三种格式化字符串的方法:

  • % - 老式(在 Python 2 和 3 中受支持)

  • () - 新样式(Python 2.6 及更高版本)

  • {} - f 字符串(Python 3.6 及更高版本)

旧样式:%

旧样式的字符串格式为 format_string % data。格式字符串不过是插值序列。

语法
说明
%s
字符串
%d
十进制
%x
六进制整数
%o
八进制整数
%f
十进制浮点数
%e
指数浮点数
%g
十进制或指数浮点数
%%
文字 %


# 使用 % 样式类型打印整数。
print('输出 \n 以字符串格式 %s 打印数字' % 42)
print('以字符串十进制 %d 打印数字' % 42)
print('以字符串六进制 %x 打印数字' % 42)
print('以字符串指数浮点数 %g 打印数字' % 42)

输出

以字符串格式 42 打印数字
以字符串十进制 42 打印数字
以字符串六进制 2a 打印数字
以字符串指数浮点数 42 打印数字

使用旧格式 % 进行字符串和整数插值

字符串中的 %s 表示插入字符串。字符串中出现的 % 的次数需要与字符串后面的 % 之后的数据项数量相匹配。

单个数据项紧跟在最后一个 % 之后。多个数据必须分组为一个元组,见下面的示例。

您还可以在格式字符串中的 % 和类型说明符之间添加其他值,以指定最小和最大宽度、对齐方式和字符填充。

1. + 表示右对齐
2. - 表示左对齐
3. . 表示单独的 minwidth 和 maxchars。
4. minwidth 表示要使用的最小字段宽度
5. maxchars 表示从数据值中打印多少个字符/数字


player = 'Roger Federer'
country = 'Legend'
titles = 20

# 注意,请仅在 Python 2 上尝试。如果您在 Python3 上运行,以下命令的输出将会有很大差异。

print('Output \n*** Tennis player %s From %s had won %d titles ' %(player,country,titles))
print('%s' % player) # print player
print('%5s' % player) # print firstname of player
print('%-7s' % player) # Last Name of player
print('%5.7s' % player) # Last Name of player with 5 leading spaces

输出

*** Tennis player Roger Federer From Legend had won 20 titles
Roger Federer
Roger Federer
Roger Federer
Roger F

使用新样式的字符串和整数插值:{

如果您使用的是 Python 3.5 或更高版本,则可以使用下面部分描述的"新样式"格式。

"{}"格式的语法为 format_string.format(data)。

请记住,format() 函数的参数需要按照格式字符串中 {} 占位符的顺序排列。有时,为了提高可读性,您可以将字典或命名参数传递给格式。

player = 'Roger Federer'
player = 'Roger_Federer'
country = 'Legend'
titles = 20

print('Output \n{}'.format(player))
print(' *** Tennis player {} From {} had won {} titles '.format(player,country,titles))

# positonal arguments
print(' *** Tennis player {1} From {2} had won {0} titles '.format(titles,player,country))

# named arguments
print(' *** Tennis player {player} From {country} had won {titles} titles '.format(player = 'Roger Federer',country = 'Legend',titles = 20))

# Dictionary arguments
print(' *** Tennis player {player} From {country} had won {titles} titles '.format(player = 'Roger Federer',country = 'Legend',titles = 20))

# alignment left '<' (default)
print(' *** Tennis player {} From {:<5s} had won {:<5d} titles '.format(player,country,titles))

# alignment left '<' (default)
print(' *** Tennis player {} From {:<5s} had won {:<5d} titles '.format(player,country,titles))

# alignment center '^'
print(' *** Tennis player {} From {:^10s} had won {:^10d} titles '.format(player,country,titles))

# alignment right '>'
print(' *** Tennis player {} From {:>10s} had won {:>10d} titles '.format(player,country,titles))


输出

Roger_Federer
*** Tennis player Roger_Federer From Legend had won 20 titles
*** Tennis player Roger_Federer From Legend had won 20 titles
*** Tennis player Roger Federer From Legend had won 20 titles
*** Tennis player Roger Federer From Legend had won 20 titles
*** Tennis player Roger_Federer From Legend had won 20 titles
*** Tennis player Roger_Federer From Legend had won 20 titles
*** Tennis player Roger_Federer From Legend had won 20 titles
*** Tennis player Roger_Federer From Legend had won 20 titles

最新样式的字符串和整数插值:f 字符串

f 字符串出现在 Python 3.6 中,并很快成为格式化字符串的推荐方式。就我个人而言,使用这种格式。要创建 f 字符串:

1. 在起始/初始引号前使用字母 f/F。
2. 在花括号 ({}) 中包含变量名称或表达式,以将其值放入字符串中。

player = 'Roger_Federer'
country = 'Legend'
titles = 20

print(f"Output \n *** Tennis player {player} From {country} had won {titles} titles ")
print(f" *** I hope {player} wins another {titles - 10} titles ")
print(f" {'*' * 3} Tennis player {player.upper()} From {country:.^10} had won {titles} titles")

输出

*** Tennis player Roger_Federer From Legend had won 20 titles
*** I hope Roger_Federer wins another 10 titles
*** Tennis player ROGER_FEDERER From ..Legend.. had won 20 titles

现在我们已经介绍了基础知识,让我们讨论一些实时问题以及我为什么建议开始使用格式化字符串。

titles = [
('federer', 20),
('nadal', 20),
('djokovic', 17),
]
print('Output\n')
for i, (player, titles) in enumerate(titles):
print('#%d: %-10s = %d' % (
i + 1,
player.title(),
round(titles)))

输出

#0: federer = 20
#1: nadal = 20
#2: djokovic = 17

显然,当向上级发送报告时,他们不希望看到索引从 0 开始,他们希望从 1 开始。 罗杰·费德勒是网球传奇人物,我个人希望将他表示为 #1 而不是 #0。

现在进行更改,看看使用旧格式时代码的可读性如何变化。

titles = [
('federer', 20),
('nadal', 20),
('djokovic', 17),
]
print('Output\n')
for i, (player, titles) in enumerate(titles):
print('#%d: %-10s = %d' % (
i + 1,
player.title(),
round(titles)))

输出

#1: Federer = 20
#2: Nadal = 20
#3: Djokovic = 17

最后,我提供了一个例子来说明为什么 f 字符串更易于管理。

old_school_formatting = (
' Tennis Legeng is %(player)s, '
' %(player)s had won %(titles)s titles, '
'and he is from the country %(country)s.')
old_formatted = old_school_formatting % {
'player': 'Roger Federer',
'titles': 20,
'country': 'Swiss',
}
print('Output\n' + old_formatted)

输出

Tennis Legeng is Roger Federer, Roger Federer had won 20 titles, and he is from the country Swiss.


new_formatting = (
' Tennis Legeng is {player}, '
' {player} had won {titles} titles, '
'and he is from the country {country}')
new_formatted = new_formatting.format(
player= 'Roger Federer',
titles= 20,
country= 'Swiss',
)
print('Output\n' + new_formatted)

输出

Tennis Legeng is Roger Federer, Roger Federer had won 20 titles, and he is from the country Swiss

这种风格稍微不那么嘈杂,因为它消除了字典中的某些引号和格式说明符中的相当多的字符,但它几乎没有说服力。


相关文章


有用资源