python学习笔记04:格式化字符串
目录
1. 使用%
%的常用转换类型
转换 | 说明 | 示例 |
---|---|---|
d,i | 整型 | '%i'%(4.3) 返回'4' |
u | 无符号整型 | |
f | 浮点型, m.dddd | '%5.3f'%(1/3) 返回'0.333' |
e | 浮点型, m.dddde+/-xx | '%5.3e'%(1/3) 返回'3.333e-01' |
E | 浮点型, m.ddddE+/-xx | '%5.3E'%(1/3) 返回'3.333E-01' |
g | ||
c | char, 单字符 | '%c'%(78), 返回'N' |
s | str或能用str()转换的数据 | '%s'%(1/3), 返回'0.3333333333333333' |
% | 输入一个% | '30%%'%(), 返回'30%' |
1.1. 对整数指定宽度
>>> n = 5
>>> s = '%8d'%(n)# '5',默认为右对齐;
>>> s = '%08d'%(n)# '00000005',前面补0;
>>> s = '%-8d'%(n)# '5', 使用负号,左对齐;
1.2. 通过变量指定宽度
>>> w = 8
>>> n = 5
>>> s = '%*d'%(w, n)# '5',默认右对齐;
>>> s = '%0*d'%(w, n) # '00000005',前面补0;
>>> s = '%-*d'%(w, n) # '5',左对齐;
1.3. 对小数指定宽度
只指定总宽度
>>> n = 3.1415926 # 整数部分1位,小数部分7位
>>> '%5f'%(n) # '3.141593' n长度超过5,所以不舍去bit,但为什么最后的6被四舍五入了?
>>> '%6f'%(n) # '3.141593' n长度超过6,所以不舍去bit,但为什么最后的6被四舍五入了?
>>> '%7f'%(n) # '3.141593' n长度超过7,所以不舍去bit,但为什么最后的6被四舍五入了?
>>> '%8f'%(n) # ' 3.141593' 整数部分2bit,小数部分6bit,共8bit;
指定总宽度和小数宽度
>>> n = 3.1415926 # 整数部分1位,小数部分7位
>>> '%5.0f'%(n) # '3',共5bit, 小数部分0bit,整数部分5bit,小数点0bit;
>>> '%5.1f'%(n) # '3.1',共5bit, 小数部分1bit,整数部分3bit,小数点1bit;
>>> '%5.3f'%(n) # '3.142',共5bit, 小数部分3bit,整数部分1bit,小数点1bit;
>>> '%5.4f'%(n) # '3.1416' 小数部分4bit,整数部分1bit,小数点1bit,超过了5bit,实际共6bit,相当于'%6.4f'%(n);
>>> '%5.5f'%(n) # '3.14159' 小数部分5bit,整数部分1bit,小数点1bit,超过了5bit,实际共7bit,相当于'%7.5f'%(n);
>>> '%05.1f'%(n) # '003.1' 小数部分1bit,整数部分3bit,小数点1bit,共5bit;
1.4. 通过变量指定总宽度和小数宽度
>>> w_all = 5
>>> w_frac = 1
>>> '%0*.*f'%(w_all, w_frac, n) # '003.1' 小数部分1bit,整数部分3bit,小数点1bit,共5bit;
2. 使用format
format是python2.6后增加的功能
2.1. 通过位置映射
>>> '{} and {}'.format('hello', 'world') # 'hello and world' ,不指定位置,按默认顺序;
>>> '{0} and {1} or {0}'.format('hello', 'world') # 'hello and world or hello' ,指定位置,位置可以重复使用;
2.2. 通过key映射
>>> '{name} is {age} years old'.format(age=18, name='Jim') # 'Jim is 18 years old'
2.3. 通过下标映射
>>> list_info = ['Jim', 18]
>>> '{0[0]} is {0[1]} years old'.format(list_info) # 'Jim is 18 years old'
>>> '{list_arg[0]} is {list_arg[1]} years old'.format(list_arg=list_info) # 'Jim is 18 years old'
2.4. 填充与对齐, 用变量指定宽度
语法: {:[填充符][对齐方式][宽度]}
对齐方式:'^'表示居中,'<'表示左对齐,'>'表示右对齐;
宽度: 通过数字或变量指定;
>>> '{s0:<10}'.format(s0='abcd') #左对齐
'abcd '
>>> '{s0:^10}'.format(s0='abcd') #居中对齐
' abcd '
>>> '{s0:>10}'.format(s0='abcd') #右对齐
' abcd'
>>> '{s0:0>10}'.format(s0='abcd') #不足补0
'000000abcd'
>>> '{s0:x^10}'.format(s0='abcd') #不足补x
'xxxabcdxxx'
>>> '{s0:x^{w}}'.format(s0='abcd', w=10) #通过变量指定宽度
'xxxabcdxxx'
>>> '{s0:{t}^{w}}'.format(s0='abcd',t='x', w=10) #通过变量指定填充字符, 好像只支持一个字符
'xxxabcdxxx'
>>> '{s0:{t}{d}{w}}'.format(s0='abcd',t='x', d='^', w=10) #通过变量指定对齐方式
'xxxabcdxxx'
out
2.5. 指定小数部分宽度
>>> '{:.3f}'.format(0.123456)# '0.123',.3f表示小数部分占3bit;
>>> '{:7.3f}'.format(0.123456) # '[ ][ ]0.123',7.3f表示小数部分占3bit,字符总宽度7bit;
>>> '{n:{w_all}.{w_frac}f}'.format(m=0.123456, w_all=7, w_frac=3) # '[ ][ ]0.123',通过变量指定宽度;
2.6. 添加千分位分隔符
>>> '{:,}'.format(1234567.89123) # 1,234,567.89123 , ':,'表示添加千分位分隔符;
2.7. 把小数打印为百分数
>>> n = 0.123456789
>>> '{:.2%}'.format(n) # 指定为百分数, 且小数部分有两位有效数字
'12.35%'