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

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

我们可以使用各种格式将数据值插入字符串。 我们可以使用这种方法来调试代码,生成报表,表格和其他输出。 在这个话题中,我们将看到三种格式化字符串的方法以及如何将数据值插入字符串中。

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

  • % – 老式的(支持Python 2和3)

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

  • {} – f-strings(Python 3.6及更高版本)

阅读更多:Python 教程

老式样式:%

旧式字符串格式化的形式为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 = '罗杰·费德勒'
country = '传奇'
titles = 20

# 请注意,请仅在Python 2上尝试此操作。如果您正在运行Python3,则下面命令的输出将有很大差异。

print('输出 \n*** 网球选手%s来自%s,赢得了%d个冠军'%(player,country,titles))
print('%s'%player)#打印球员
print('%5s'%player)#打印球员的名字
print('%-7s'%player)#球员的姓氏
print('%5.7s'%player)#姓氏为5个前导空格的球员

输出

*** 网球选手罗杰·费德勒来自传奇,赢得了20个冠军
罗杰·费德勒
罗杰·费德勒
费德勒
费德勒

字符串和整数插值:新样式{}

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

“{}”格式化的语法为format_string.format(data)。

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

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

print('输出 \n{}'.format(player))
print(' *** 网球选手 {} 来自 {},赢得了 {} 个冠军'.format(player,country,titles))

# 位置参数
print(' *** 网球选手 {1} 来自 {2},赢得了 {0} 个冠军'.format(titles,player,country))

# 命名参数
print(' *** 网球选手 {player} 来自 {country},赢得了 {titles} 个冠军'.format(player = 'Roger Federer',country = 'Legend',titles = 20))

# 字典参数
print(' *** 网球选手 {player} 来自 {country},赢得了 {titles} 个冠军'.format(player = 'Roger Federer',country = 'Legend',titles = 20))

# 左对齐 '<' (默认)
print(' *** 网球选手 {} 来自 {:<5s},赢得了 {:<5d} 个冠军'.format(player,country,titles))

# 左对齐 '<' (默认)
print(' *** 网球选手 {} 来自 {:<5s},赢得了 {:<5d} 个冠军'.format(player,country,titles))

# 居中对齐 '^'
print(' *** 网球选手 {} 来自 {:^10s},赢得了 {:^10d} 个冠军'.format(player,country,titles))

# 右对齐 '>'
print(' *** 网球选手 {} 来自 {:>10s},赢得了 {:>10d} 个冠军'.format(player,country,titles))

输出

Roger_Federer
*** 网球选手 Roger_Federer 来自 Legend,赢得了 20 个冠军
*** 网球选手 Roger_Federer 来自 Legend,赢得了 20 个冠军
*** 网球选手 Roger Federer 来自 Legend,赢得了 20 个冠军
*** 网球选手 Roger Federer 来自 Legend,赢得了 20 个冠军
*** 网球选手 Roger Federer 来自 Legend,赢得了 20 个冠军
*** 网球选手 Roger Federer 来自 Legend,赢得了 20 个冠军
*** 网球选手 Roger Federer 来自 Legend,赢得了 20 个冠军
*** 网球选手 Roger Federer 来自 Legend,赢得了 20 个冠军

使用最新风格的字符串和整数插值方式:f-strings

f-strings 出现在 Python 3.6 中,很快成为推荐的字符串格式化方式。我个人使用这种格式。 制作 f-string :

1. 在开始/初始引号前使用字母 f/F。
2. 在花括号 ({}) 中包含变量名或表达式,以获取它们的值到字符串中。

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

print(f"输出 \n *** 网球选手 {player} 来自 {country},赢得了 {titles} 个冠军")
print(f" *** 我希望 {player} 赢得另外 {titles - 10} 个冠军 ")
print(f" {'*' * 3} 网球选手 {player.upper()} 来自 {country:.^10},赢得了 {titles} 个冠军")

输出

*** 网球选手 Roger_Federer 来自 Legend,赢得了 20 个冠军
*** 我希望 Roger_Federer 赢得另外 10 个冠军 
*** 网球选手 ROGER_FEDERER 来自 ..Legend..,赢得了 20 个冠军

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

titles = [
('federer', 20),
('nadal', 20),
('djokovic', 17),
]
print('输出\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('输出\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-strings 更容易管理。

old_school_formatting = (
' 网球传奇是 %(player)s,'
'%(player)s已经赢得了 %(titles)s个冠军,'
'他来自%(country)s国家。')
old_formatted = old_school_formatting % {
'player': '罗杰·费德勒',
'titles': 20,
'country': '瑞士',
}
print('输出\n' + old_formatted)

输出

网球传奇是罗杰·费德勒,罗杰·费德勒已经赢得了20个冠军,他来自瑞士国家。
new_formatting = (
' 网球传奇是{player},'
'{player}已经赢得了{titles}个冠军,'
'他来自{country}国家。')
new_formatted = new_formatting.format(
player= '罗杰·费德勒',
titles= 20,
country= '瑞士',
)
print('输出\n' + new_formatted)

输出

网球传奇是罗杰·费德勒,罗杰·费德勒已经赢得了20个冠军,他来自瑞士国家。

这种风格稍微不那么喧闹,因为它消除了 字典 中的一些引号以及格式说明符中的一些字符,但并不十分令人信服。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程