python之飘逸的format格式化字符串控制

除了传统的 % 格式化字符串外,python还提供了一种观感极强的格式化方法:{:}.format(...)

传参

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
### 1. 按索引取值

>>> '{}-{}'.format(111,222) # 默认索引,等价于 '{0}-{1}'.format(111,222)
111-222

# 索引顺序可以手动指定
>>> {0}-{1}-{0}'.format(111,222)
111-222-111

# 传入序列也可以按索引取值,但是格式很奇葩
>>> A = [1, 2, 3, 4]
>>> B = ['a', 'b', 'c', 'd']
>>> '{0[0]}-{1[1]}-{0[2]}-{1[3]}'.format(A, B)
1-b-3-d

### 2. 通过关键字取值

>>> '{k2}-{k1}'.format(k1=111,k2=222)
222-111

# 关键字和列表一起使用
>>> '{L[0]}-{L[1]}'.format(L=A) # 或者 '{0[0]}-{0[1]}'.format(A)
1-2

### 3. 传入对象
>>> '{obj.attr1}-{obj.attr2}'.format(obj)

### 4. 使用*args和**kwargs
>>> args = ['friend', 'You']
>>> kwargs = {'whose': 'my', 'how': 'are'}
# 在下面的例子中format直接在**参数中查找对应的键{},索引{}按照索引顺序在*参数中查找
>>> '{1} {how} {whose} best {0}'.format(*args, **kwargs)
You are my best friend

格式控制 {:}(借助于:符号)

定宽&填充

1
2
3
4
5
6
7
8
>>> '{:w>8}'.format(1314)
wwww1314
'''
: 格式控制必须字符
w 是填充符,必须为单字符,可以不指定,默认为空格,例如 {:>8}
> 左对齐,相应地'<'为右对齐, '^'为居中对齐
8 域宽
'''

浮点数精度

1
2
3
4
5
6
7
>>> '{:.2f}'.format(1.2345) # .2 代表保留两位小数,而不是两位有效数字
1.23

>>> '{:.{}f}'.format(1.2345, 3) # {}的嵌套使用,按照从左至右,从外到内的顺序
1.234

>>> '{k:.2f}'.format(k=1.2345) # 配合关键字使用

域宽和浮点数格式控制可以一起使用:

1
2
3
4
5
6
7
8
9
10
11
>>> '{num:{fill}{align}{width}.{frac}f}'.format(
num=3.1415926,
fill='-',
align='>',
width='10',
frac='2') # 带关键字的写法
------3.14

# 与下面的方式等效
>>> ':->10.2f'.format(3.1415926)
------3.14

进制转换

1
2
3
4
5
6
7
8
9
10
11
>>> '{:b}'.format(520) # 二进制
1000001000

>>> '{:d}'.format(520) # 十进制
520

>>> '{:o}'.format(520) # 八进制
1010

>>> '{:x}'.format(520) # 十六进制
208

数字分隔符

1
2
>>> {:,}.format(1234567)
1,234,567
----- For reprint please indicate the source -----
0%