Python 学习笔记: 字符串格式化

2019-08-1409:23:45编程语言入门到精通Comments2,372 views字数 2576阅读模式

字符串格式化处理

远古写法#

以前通常使用运算符号 % ,%s 插入的值 String 类型,%.3f 指插入的值为包含 3 位小数的浮点数:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

Copy
format1 = "%s, %s!" % ('Hello', 'World')
# 'Hello, World!'

关键字插入法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

Copy
temp = string.Template('I am $name, I like $what!;)
temp.substitute(name='Liang', what='Apple')
# 'I am Liang, I like Apple!' 

Python 3 推荐方法#

新版本 Python 中,应选择使用字符串方法 format,每个替换字段都用 {} 大括号(花括号)括起,括号内可留空或添加格式设置信息:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

  • 一般用法:
Copy
'I am {},I like {}'.format('Liang', 'Apple')
# 'I am Liang, I like Apple!' 

'I am {0},I like {1}'.format('Liang', 'Apple')
# 'I am Liang, I like Apple!' 
  • 索引也可无需像上面一样顺序排列,但注意不能同时使用自动索引和手工索引
Copy
'I am {1},I like {0}'.format('Apple', 'Liang')
# 'I am Liang, I like Apple!' 
  • 更可以像上面关键字插入法一样,给每个替换字段命名,名称后面跟冒号可以设置格式:
Copy
'{name} is {value:.2f},'.format(name='π', value=pi)
# 'π is 3.14' 
  • 终极简约写法,在字符串前面加上 f,便可直接将值或变量写在大括号内:
Copy
f"{'π'} is {pi:.2f}"
# 'π is 3.14' 
  • 如果输出结果中需要包含大括号,则可使用两个大括号来指定:
Copy
"{{我需要使用{what}啊!}}".format(what='大括号')
# {我需要使用大括号啊!}
  • 关键字插入法可以和索引同时使用:
Copy
'{foo} {1} {bar} {0}'.format(1, 2, foo=3, bar=4)
# '3 1 2 4'

基本转换#

指定占位符要转换的类型;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

例如,你可以提供一个整数,但将其作为小数进行处理:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

Copy
num = 1024
f'The number is {num:f}'
# 'The number is 1024.000000'

亦或者将其作为二进制处理:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

Copy
num = 1024
f'The number is {num:b}'
# 'The number is 10000000000'

以下为字符串格式设置类型说明符:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

说明符含义
b将整数表示为二进制
c将整数解读为Unicode码点
d将整数视为十进制数进行处理,这是整数默认使用的说明符
e使用科学表示法来表示小数(用 e 来表示指数)
E与 e 相同,但使用 E 来表示指数
f将小数表示为定点数
F与 f 相同,但与特殊值(nan 和 inf),使用大写表示
g自动在定点表示法和科学表示法之间做选择。这是默认用于小数的说明符,但在默认情况下至少有 1 位小数
G与 g 相同,但使用大写来表示指数和特殊值
n与 g 相同,但插入随区域而异的数字分隔符
o将整数表示为八进制数
s保持字符串的格式不变,这是默认用于字符串的说明符
x将整数表示为十六进制数并使用小写字母
X与 X 相同,但使用大写字母
%将数表示为百分比值(乘以100,按说明符 f 的设置格式,再在后面加上 %)

宽度、精度和千位分隔符#

在字符串格式化处理是,不但可以转换类型,还可以设置转换字段的宽度和精度;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

宽度使用整数表示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

Copy
num = 1024
f'{num:10}'
# '      1024'

数字和字符串的默认对齐方式不同:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

Copy
num = '1024'
f'{num:10}'
# '1024      '

精度也是使用整数表示,但需要在整数前加上小数点:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

Copy
num = 1024
f'{num:.2f}'
# '1024.00'

宽度可以和精度同时指定:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

Copy
num = 1024
f'{num:10.2f}'
# '   1024.00'

字符串类型也可以指定精度,但不推荐使用,使用切片处理则更好理解:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

Copy
str = '今天天气不错~'
f'{str:.2}'
# '今天'

在冒号后面添加一个逗号可以为数值添加千位分隔符:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

Copy
num = 10000000000000
f'{num:,}'
# '10,000,000,000,000'

填充、对齐与符号#

在不添加对齐符号(使用默认对齐方式)的情况下,尽可以使用 0 进行有意义的填充操作:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

Copy
num = 1024
f'{num:010}'
# '0000001024'

但是在添加了对齐符号之后,就可以在对齐符号前面任意添加一个字符表示填充字符了;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

对齐符号:<(左对齐)、>(右对齐)、^(居中),写在宽度之前:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

Copy
num = 1024
f'{num:<10}'
'1024      '
f'{num:^10}'
'   1024   '
f'{num:>10}'
'      1024'

当替换字段为数值时,可为替换字段添加正负符号,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

添加 + 符号时,加号写在对齐符号之后,宽度整数之前;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

添加 - 符号时,减号写在替换字段的之前;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

可以理解为将替换字段的数值乘以 +1(将 + 显示)或 -1 :文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

Copy
num = 1024
f'{num:>+10}'
'     +1024'
f'{-num:>10}'
'     -1024'

如果需要为负数添加符号:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

Copy
num = -1024
f'{num:>10}'
'     -1024'
f'{-num:>+10}'
'     +1024'

= 是一种添加了正负符号之后的另一种对齐符号(可以理解为 两端对齐),作用是将填充字符放在符号和数字之间:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

Copy
num = 1024
f'{num:=+10}'
'+     1024'
f'{-num:=10}'
'-     1024'

总结#

Copy
'{[0]sum[1][2][3][4][5]}'

0:为替换字段添加 - 符号(替换字段须为数字且不为负数,因为负数无需再多此一举);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

1:为替换字段指定宽度之后可以在此位置指定填充字符,默认为空格;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

2:为替换字段指定宽度之后可以在此位置指定对齐符号,<(左对齐) / ^(居中) / >(右对齐) / =(两端对齐,只能用于类型为数值切有正负符号的替换字段);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

3:为替换字段添加 + 符号(替换字段须为数字);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

4:指定替换字段的宽度,只能填写整数;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

5:指定替换字段的精度或转换类型;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

作者:__Light文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/15151.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/15151.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定