目录
0. 格式化语法结构
再次说明字符串的标准格式化规范语法如下:
format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill ::= <any character>
align ::= "<" | ">" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= digit+
grouping_option ::= "_" | ","
precision ::= digit+
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
1. align、width、fill选项
对齐(**[align]**)选项,一共有 '<'、'>'、'='、'^'4 个值可供使用。
既然要实现对齐,那么就需要指定一个更大的空间才行(否则没意义),更大的空间可以通过宽度(**[width]**)选项来指定。
1.1-1.4章节中,所有'<'、'>'、'='、'^'后的数值都是width值。
1.1 '<'左对齐
强制字符串在可用空间内左对齐;
只输入width选项数值,除非()内元素为复数,否则即默认左对齐;
整数、字符串、浮点数、复数可以使用format对齐,列表、元组则报错;
浮点数、复数对齐时,数字、标点符号'.'、复数符号'j'都占据一位;
当给出的width宽度小于元素长度,则直接插入元素,对齐没意义。
#强制字符串0在3字节可用空间内左对齐;
'中{:<3}文'.format('0')
'中0 文'
#只输入width选项数值,除非()内元素为复数,否则即默认左对齐
'中{:3}文'.format('0')
'中0 文'
#()内元素为复数时,只输入width默认为右对齐,可以通过使用<变为左对齐
'中{:3}文'.format(1j)
'中 1j文'
'中{:<3}文'.format(1j)
'中1j 文'
#整数、字符串、浮点数可以使用format对齐,列表、元组则报错;
'中{0:3}文'.format(0,'1',2.0,[3,4],(5,))
'中 0文'
'中{1:3}文'.format(0,'1',2.0,[3,4],(5,))
'中1 文'
'中{2:3}文'.format(0,'1',2.0,[3,4],(5,))
'中2.0文'
'中{3:3}文'.format(0,'1',2.0,[3,4],(5,))
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unsupported format string passed to list.__format__
'中{4:3}文'.format(0,'1',2.0,[3,4],(5,))
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unsupported format string passed to tuple.__format__
当给出的width宽度小于元素长度,则直接插入元素
'中{:3}文'.format('0123')
'中0123文'
1.2 '>'右对齐
强制字符串在可用空间内右对齐,支持整数、字符串、浮点数、复数;
#强制字符串在可用空间内右对齐,支持整数、字符串、浮点数、复数
'中{0:>5}文'.format('01',23,4.5,7+8j)
'中 01文'
'中{1:>5}文'.format('01',23,4.5,7+8j)
'中 23文'
'中{2:>5}文'.format('01',23,4.5,7+8j)
'中 4.5文'
'中{3:>5}文'.format('01',23,4.5,7+8j)
'中(7+8j)文'
1.3 '='填充
强制将填充放置在符号(如果有)之后但在数字之前的位置(这适用于以 “+000000120” 的形式打印字符串);
填充支持整型和浮点数,字符串、复数不可用于该方法;
填充数据在数字之前,或者在'-'符号和数字之间填充,'+'无效果;
#填充支持整型和浮点数,填充数据在数字之前,或者在'-'符号和数字之间填充
'中{0:=10}文'.format(12,-23,3.4,-3.4)
'中 12文'
'中{1:=10}文'.format(12,-23,3.4,-3.4)
'中- 23文'
'中{2:=10}文'.format(12,-23,3.4,-3.4)
'中 3.4文'
'中{3:=10}文'.format(12,-23,3.4,-3.4)
'中- 3.4文'
#填充对'+'无效果;
'中{:=10}文'.format(+3)
'中 3文'
#填充字符串、复数不可用报错
'中{:=10}文'.format(1j)
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: '=' alignment flag is not allowed in complex format specifier
'中{:1=10}文'.format('3')
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: '=' alignment not allowed in string format specifier
1.4 '^'居中
强制字符串在可用空间内居中;
当字符串不能恰好在中间时,整体在中间位置靠前一位;
支持整数、字符串、浮点数、复数,不支持列表、元组。
#强制字符串在可用空间内居中,当字符串不能恰好在中间时,整体在中间位置靠前一位
#支持整数、字符串、浮点数、复数
'中{0:^10}文'.format(0,'1',2.0,3j,[4],(5,6))
'中 0 文'
'中{1:^10}文'.format(0,'1',2.0,3j,[4],(5,6))
'中 1 文'
'中{2:^10}文'.format(0,'1',2.0,3j,[4],(5,6))
'中 2.0 文'
'中{3:^10}文'.format(0,'1',2.0,3j,[4],(5,6))
'中 3j 文'
#不支持列表、元组
'中{4:^10}文'.format(0,'1',2.0,3j,[4],(5,6))
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unsupported format string passed to list.__format__
'中{5:^10}文'.format(0,'1',2.0,3j,[4],(5,6))
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unsupported format string passed to tuple.__format__
1.5 fill选项
对齐([align])选项的前面通过填充选项(**[fill]**)指定填充字符;
直接在width值前加0,相当于设置了 [fill] 为 '0',然后 [align] 设置为 '=',加其他数值无效,该方法'='时一样,只支持填充整型、浮点型数据;
fill选项可以为数字、字母、符号、空格、空字符串,空格和空字符串与未填写fill一致,即默认填充空格;
fill选项只能填充单字符,否则报错。
#fill选项可以为数字、字母、符号、空格、空字符串
'中{:1>10}文'.format(666)
'中1111111666文'
'中{:&<10}文'.format('xyz')
'中xyz&&&&&&&文'
'中{:$=10}文'.format(-0.03)
'中-$$$$$0.03文'
#空格和空字符串与未填写fill一致,即默认填充空格;
'中{: ^10}文'.format(2+5j)