【注意】最后更新于 May 29, 2019,文中内容可能已过时,请谨慎使用。
背景
Pyton用了一段时间了,对字符串的格式化最多用的就是"%s" % var
,最多,多加几个参数,或者加个str()
处理一下。一直美誉深究,能用就好。
前段时间刚好做了一个测试,想把字符串安装特定的格式输出,这样看过程更加方便点。
简单使用
基本用法是 “字符串模版”.format(<逗号分隔的参数>)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 默认顺序
'{}{}'.format(‘编码’,‘生活’)
# out: 编码生活
# 指定顺序复用
'一时{0}一时{1}, 一直{0}一直{1}'.format('偷懒','爽')
# out: '一时偷懒一时爽, 一直偷懒一直爽'
# 大括号的输出
'我们来用{0}{{}}{0}{{}},{1}{{}}{1}{{}}造句'.format('一时','一直')
#out: '我们来用一时{}一时{},一直{}一直{}造句'
'我们来用{0}{{0}}{0}{{1}},{1}{{0}}{1}{{1}}造句'.format('一时','一直')
#out: '我们来用一时{0}一时{1},一直{0}一直{1}造句'
'我们来用{0}{{0}}{0}{{1}},{1}{{0}}{1}{{1}}造句'.format('一时','一直').format('偷懒','爽')
#out: '我们来用一时偷懒一时爽,一直偷懒一直爽造句'
|
格式控制信息
format()方法中<模板字符串>的槽除了包括参数序号,还可以包括格式控制信息。此时,槽的内部样式如下:
{<参数序号>: <格式控制标记>}
其中,<格式控制标记>用来控制参数显示时的格式,包括:<填充><对齐><宽度>,<.精度><类型>6 个字段,这些字段都是可选的,可以组合使用,逐一介绍如下。
<填充> |
<对齐> |
<宽度> |
, |
<.精度> |
<类别> |
用于填充的单个字符 |
< 左对齐, > 右对齐, ^ 居中对齐 |
槽的设定,输出宽度 |
数字的千位分隔符,适用于整数和浮点数 |
浮点数小数部或字符串最大输出长度 |
整数类型BcdoXx,浮点数类型Eef% |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
s = "PYTHON"
"{0:30}".format(s)
# out: 'PYTHON '
"{0:>30}".format(s)
# out: ' PYTHON'
"{0:*^30}".format(s)
# out: '************PYTHON************'
"{0:-^30}".format(s)
# out: '------------PYTHON------------'
"{0:3}".format(s)
# out: 'PYTHON'
"{0:-^20,}".format(1234567890)
# out: '---1,234,567,890----'
"{0:-^20}".format(1234567890) #对比输出
# out: '-----1234567890-----'
"{0:-^20,}".format(12345.67890)
# out: '----12,345.6789-----'
"{0:.2f}".format(12345.67890)
# out: '12345.68'
"{0:H^20.3f}".format(12345.67890)
# out: 'HHHHH12345.679HHHHHH'
"{0:.4}".format("PYTHON")
# out: 'PYTH'
"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(251)
# out: '11111011,û,251,373,fb,FB'
"{0:e},{0:E},{0:f},{0:%}".format(3.14)
# out: '3.140000e+00,3.140000E+00,3.140000,314.000000%'
"{0:.2e},{0:.2E},{0:.2f},{0:.2%}".format(3.14)
# out: '3.14e+00,3.14E+00,3.14,314.00%'
|
%操作符
模版
格式化字符串时,Python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的格式。Python用一个tuple将多个值传递给模板,每个值对应一个格式符。
1
|
print("I'm %s. I'm %d year old" % ('Vamei', 99))
|
"I'm %s. I'm %d year old"
为我们的模板。%s
为第一个格式符,表示一个字符串。%d
为第二个格式符,表示一个整数。('Vamei', 99)
的两个元素'Vamei'
和99为替换%s
和%d
的真实值。
在模板和tuple
之间,有一个%
号分隔,它代表了格式化操作。
整个"I'm %s. I'm %d year old" % ('Vamei', 99)
实际上构成一个字符串表达式。我们可以像一个正常的字符串那样,将它赋值给某个变量。比如:
1
2
3
4
|
a = "I'm %s. I'm %d year old" % ('Vamei', 99)
print(a)
|
我们还可以用词典来传递真实值。如下:
1
|
print("I'm %(name)s. I'm %(age)d year old" % {'name':'Vamei', 'age':99})
|
可以看到,我们对两个格式符进行了命名。命名使用()括起来。每个命名对应词典的一个key。
格式符
格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下:
格式符 |
说明 |
%s |
字符串 (采用str()的显示) |
%r |
字符串 (采用repr()的显示) |
%c |
单个字符 |
%b |
二进制整数 |
%d |
十进制整数 |
%i |
十进制整数 |
%o |
八进制整数 |
%x |
十六进制整数 |
%e |
指数 (基底写为e) |
%E |
指数 (基底写为E) |
%f |
浮点数 |
%F |
浮点数,与上相同 |
%g |
指数(e)或浮点数 (根据显示长度) |
%G |
指数(E)或浮点数 (根据显示长度) |
%% |
字符”%” |
可以用如下的方式,对格式进行进一步的控制:
%[(name)][flags][width].[precision]typecode
(name)
为命名
flags
可以有+
,-
,' '
或0
。+
表示右对齐。-
表示左对齐。' '
为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0
表示使用0填充。
width
表示显示宽度
precision
表示小数点后精度
比如:
1
2
3
|
print("%+10x" % 10)
print("%04d" % 5)
print("%6.3f" % 2.3)
|
上面的width
, precision
为两个整数。我们可以利用*
,来动态代入这两个量。比如:
1
|
print("%.*f" % (4, 1.2))
|
Python实际上用4来替换*。所以实际的模板为"%.4f"
。
参考
- https://blog.csdn.net/sinat_28981497/article/details/69218893
- https://www.cnblogs.com/vamei/archive/2013/03/12/2954938.html
- https://blog.csdn.net/i_chaoren/article/details/77922939