python学习笔记4:格式化字符串

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 , ':,'表示添加千分位分隔符;
原文地址:https://www.cnblogs.com/gaiqingfeng/p/13228951.html