1.介绍以及基本使用
在Python3中新增加了一个更强的格式化字符串的方法:format。现在,format已经被反向移植到了Python2.7中
- 位置,{ } 做为占位符
In [1]: 'name is {},age is {}'.format('xiaowang',18)
Out[1]: 'name is xiaowang,age is 18'
In [2]: '{3} and {1}'.format('abc','ef','cde','th')
Out[2]: 'th and ef'
In [2]: '{2}, {1}, {0}'.format(*'abc')
Out[2]: 'c, b, a'
In [4]: "{0[0]},{1[0]}".format([1,2,3],("a","b"))
Out[4]: '1,a'
- 关键字
In [5]: 'name is {name},age is {age}'.format(age=19,name='xiaowang')
Out[5]: 'name is xiaowang,age is 19'
In [3]: '{name}, {age}'.format(**{"name":"xiaoming","age":20})
Out[3]: 'xiaoming, 20'
2. 标准的格式规范 ( {:}中的格式化语法 )
语法中是以:开头,从左到右依次包含以下字段。
填充字符:可以是任意的 单字符。
-
对齐选项:
<表示左对齐。 >表示右对齐。 ^表示居中对齐。 =表示 填充字符,放在数字正负号的后面,数字之前。这个选项只适合数字格式化。
-
符号选项:这个字段只对数字有效。
+表示数字前面加上正负号。 -表示负数前面加上符号。这个是默认的。 空格表示正数前面保留一个空格
In [13]: '{:+f}; {:+f}'.format(3.14, -3.14) Out[13]: '+3.140000; -3.140000' In [15]: '{: f};{: f}'.format(3.14, -3.14) Out[15]: ' 3.140000;-3.140000'
-
最小字符宽度:整型数字。如果没有指定,由 传入的数据来决定。
填充对齐和最小字段宽度通常是一起使用的。In [12]: "{:@^10}".format("abc") Out[12]: '@@@abc@@@@'
-
# 通常用于 格式化输出其他进制的整数。
b 代表二进制 d 代表十进制 o 代表八进制 x 代表十六进制,字母小写 X 代表十六进制,字母大写
In [15]: "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42) Out[15]: 'int: 42; hex: 2a; oct: 52; bin: 101010' In [17]: "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42) ...: Out[17]: 'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010' In [78]: "int: {1:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42,55) ...: Out[78]: 'int: 55; hex: 0x2a; oct: 0o52; bin: 0b101010'
-
0
如果没有指定对齐选项,并且0加在了最小宽度前面,相当于“0=宽度”In [37]: "{:010}".format(100) Out[37]: '0000000100' In [38]: "{:0=10}".format(-100) Out[38]: '0000000100'
-
分组选项:
,表示使用逗号作为千位分隔符。 通常用于格式化 整数和浮点数。
_表示使用一个下划线作为千位分隔符。
使用下划线的时候注意:如果 格式化后的字符是int或者float,每3个字符插入一个下划线。如果 格式化后的字符类型是b、o、x、X,那么每4个字符插入一个下划线。In [17]: '{:,}'.format(1234567890) Out[17]: '1,234,567,890' In [18]: '{:_}'.format(1234567890) Out[18]: '1_234_567_890' In [19]: '{:_b}'.format(100) Out[19]: '110_0100'
-
精度
如果被格式化的数据是 浮点数:代表当你使用f格式化浮点数的时候,保留的小数点位数。 注意不能是 整数。
如果被格式化的数据是 非数字:代表 最大字段宽度。In [27]: '{:.3f}'.format(3.1415) Out[27]: '3.142' In [29]: '{:.3s}'.format("python") Out[29]: 'pyt'
-
类型
s 代表字符串,默认的,可以省略。b 代表二进制
d 代表十进制
o 代表八进制
x 代表十六进制,字母小写
X 代表十六进制,字母大写f 代表浮点数,默认保留6位小数。
e 代表使用 科学计数法 来展示数字。
E 和e相同,只不过使用 大写字母表示。
科普:科学记数法是一种记数的方法。把一个数表示成a(1≤a<10,n为整数)与10的幂相乘的形式,这种记数法叫做科学记数法。
当我们要标记或运算某个较大或较小且位数较多时,用科学记数法免去浪费很多空间和时间。
例如:1000 = 1*10**3 1000的科学计数法就是:1e+03。通常3被称做 指数。In [77]: '{:.2e}'.format(100) Out[77]: '1.00e+02' % 代表以百分比的形式显示数字。默认保留6位小数。 In [74]: '{:.3%}'.format(0.1) Out[74]: '10.000%' g 在e和f之间自动切换,大的数字用 科学计数法表示;小的数字用f格式化。 在e和f之间切换的规则: In [95]: '{:.2g}'.format(100.12456) # 精度 小于等于 指数,g相当于e Out[95]: '1e+02' In [97]: '{:.4g}'.format(100.12456) # 精度4,大于 指数2,g相当于f,最终的精度=精度-1-指数=1,也就是说保留1位小数。 Out[97]: '100.1'
-
有时候会在格式化之前,先对数据进行类型转换。
In [7]: "{!r}".format("abc") # 在格式化之前先调用 repr() 函数。 Out[7]: "'abc'" In [9]: "{}".format(repr("abc")) Out[9]: "'abc'" #两个例子是等价的 !s 表示 格式化之前先调用 str() 函数。 !a 表示 格式化之前先调用 ascii() 函数。