一、使用格式化符来格式化字符串:
格式化符 | 意义 |
'd' | 返回要格式化对象的十进制表示,如果可以 |
'i' | 返回要格式化对象的十进制表示,如果可以 |
'o' | 返回要格式化对象的八进制表示,如果可以 |
'u' | 同格式化符' d' |
'x' | 返回要格式化对象的十六进制表示,如果可以【如果要求的前导,使用'0x'】 |
'X' | 返回要格式化对象的十六进制表示,如果可以【如果要求的前导,使用'0 X '】 |
'e' | 返回要格式化对象的浮点的科学计数的表示,如果可以【使用'e'】 |
'E' | 返回要格式化对象的浮点的科学计数的表示,如果可以【使用'E'】 |
'f' | 返回要格式化对象的浮点数表示,如果可以 |
'F' | 返回要格式化对象的浮点数表示,如果可以 |
'g' | 使用小写字母科学计数格式,如果指数小于-4或不少于精度,否则返回十进制格式。 |
'G' | 使用大写字母科学计数格式,如果指数小于-4或不少于精度,否则返回十进制格式。 |
'c' | 对0-255之间的整数返回其对应的ASCII码字符(其它整数报错),或者返回单个字符本身 |
'r' | 返回要格式化对象的__repr__()方法的返回值 |
's' | 返回要格式化对象的__str__()方法的返回值 |
'%' | 即每两个%显示一个 |
1.%s格式化符:将要格式化的值表中对应位置的元素,格式化为字符串,如果值元素不是字符串,将自动调用该元素的__str__(),以得到其字符串表示。
[1]%ns决定对齐与填充:n为整数;当n>0时,左填充,当n<0时,右填充。
1 >>> for i,x in enumerate(('one','two','three','four','five','six')): 2 print '%5s = %d'%(x,i) 3 4 5 one = 0 6 two = 1 7 three = 2 8 four = 3 9 five = 4 10 six = 5 11 >>>
[2]%.ns决定对字符串的截取:n为正整数
1 >>> for i,x in enumerate(('one','two','three','four','five','six')): 2 print '%.3s = %d'%(x,i) 3 4 5 one = 0 6 two = 1 7 thr = 2 8 fou = 3 9 fiv = 4 10 six = 5 11 >>>
2.%d格式化符:将任何Python对象转化为整数,如果转化失败,则报错。
[1]%nd:决定对齐与填充。n为整数;当n>0时,左填充,当n<0时,右填充。
1 >>> print '%3d'%1.52 2 1 3 >>>
[2]%0nd:以数字0而不是默认的空格来作填充。
1 >>> print '%03d'%1.52 2 001 3 >>>
[3]%+d:数字被转化后将保留正负号
1 >>> print '%+d'%1.52 2 +1 3 >>> print '%+d'%-1.52 4 -1 5 >>> print '%+3d'%1.52 6 +1 7 >>> print '%+03d'%1.52 8 +01 9 >>>
3.%r格式化符:将任何Python对象转化成repr字符串,自动调用Python对象的__repr__()
[1]%nr:决定对齐与填充。n为整数;当n>0时,左填充,当n<0时,右填充。
1 >>> print 'Names = #%50r#'%(['C','CPP','CSharp','Java','Python']) 2 Names = # ['C', 'CPP', 'CSharp', 'Java', 'Python']# 3 >>> print 'Names = #%-50r#'%(['C','CPP','CSharp','Java','Python']) 4 Names = #['C', 'CPP', 'CSharp', 'Java', 'Python'] # 5 >>>
[2]%.nr:决定截取字符数。n为正整数
1 >>> print 'Names = #%.10r#'%(['C','CPP','CSharp','Java','Python']) 2 Names = #['C', 'CPP# 3 >>>
4.%o与%x格式化符:将十进制数值格式化为八进制与十六进制字符串;当有'#'时,格式化后的字符串带前导
1 >>> '%x'%20 2 '14' 3 >>> '%#x'%20 4 '0x14' 5 >>> '%#X'%20 #使用X作前缀,如果使用#要求了前缀 6 '0X14' 7 >>> '%o'%10 8 '12' 9 >>> '%#o'%10 10 '012' 11 >>>
注意:如果要格式化的数值是浮点数,将先取整,再格式化
1 >>> '%o'%13.2 2 '15' 3 >>> '%x'%20.3232 4 '14' 5 >>> '%x'%20.5232 6 '14' 7 >>>
5.%f格式化符:以浮点数格式化数值。
[1]%nf:格式化数字后填充到固定宽度;当n>0时,左填充,当n<0时,右填充。【若不指定小数位数时,最小宽度8位,如'0.000000'】
1 >>> '%20f'%32 2 ' 32.000000' 3 >>> '%-20f'%32 4 '32.000000 ' 5 >>>
[2]%.nf:格式化数字后的小数位数;n>=0且为整数
1 >>> '%.3f'%0.3245 2 '0.325' 3 >>> '%.0f'%0.3233 4 '0' 5 >>> '%.8f'%0.3245 6 '0.32450000' 7 >>>
6.%e格式化符:以浮点科学计数的方式转化数值,即10的指数幂形式
[1]%ne:将格式化后的数字字符串进行填充到指定宽度;当n>0时,左填充,当n<0时,右填充。【如不指定小数位数,最小宽度是12位,如'0.000000e+00'】
1 >>> '%15e'%8283489323232 2 ' 8.283489e+12' 3 >>> '%-15e'%8283489323232 4 '8.283489e+12 ' 5 >>>
[2]%.ne:指定小数位数;n>=0且为整数。
1 >>> '%.10e'%82834 2 '8.2834000000e+04' 3 >>> '%.2e'%8283489323232 4 '8.28e+12' 5 >>>
7.%c格式化符:将0-255之间的数字转化成对应的ASCII码字符,也可以转化单个字符,不过基本不做什么,直接返回
1 >>> '%c'%32 2 ' ' 3 >>> print '%c'%'A' 4 A 5 >>> print '%c'%8 6 7 >>>
【上面的第五行的语句在这里显示不了结果,请在IDLE或者shell中执行,就可看到结果】
二、使用str.format(*args, **kwargs)方法来格式化字符串
1.序数式格式字符串:
1 >>> '{0} is our new {1}, welcome {0}.'.format('Tom','teacher') 2 'Tom is our new teacher, welcome Tom.' 3 >>>
2.命名参数式格式字符串:
1 >>> '{name} is a lovly girl, she likes {fruit} and {food}.'.format(name='Lily',fruit='apple',food='rice') 2 'Lily is a lovly girl, she likes apple and rice.' 3 >>>
3.支持内部格式化语法,即{:xxx}这种语法
format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type] fill ::= <any character> align ::= "<" | ">" | "=" | "^" sign ::= "+" | "-" | " " width ::= integer precision ::= integer type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
看一些例子:
1 >>> '{:*^20}'.format('hello') 2 '*******hello********' 3 >>> '{:*<20}'.format('hello') 4 'hello***************' 5 >>> '{:*>20}'.format('hello') 6 '***************hello' 7 >>> # format also supports binary numbers 8 >>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42) 9 'int: 42; hex: 2a; oct: 52; bin: 101010' 10 >>> # with 0x, 0o, or 0b as prefix: 11 >>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42) 12 'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010' 13 >>> '{:,}'.format(1234567890) 14 '1,234,567,890' 15 >>> 'Progress: {:.2%}'.format(100/365.0) 16 'Progress: 27.40%' 17 >>> for align, text in zip('<^>', ['left', 'center', 'right']): 18 '{0:{fill}{align}16}'.format(text, fill=align, align=align) 19 20 21 'left<<<<<<<<<<<<' 22 '^^^^^center^^^^^' 23 '>>>>>>>>>>>right' 24 >>> for num in range(5,12): 25 for base in 'dXob': 26 print '{0:{width}{base}}'.format(num, base=base, width=5), 27 print 28 29 30 5 5 5 101 31 6 6 6 110 32 7 7 7 111 33 8 8 10 1000 34 9 9 11 1001 35 10 A 12 1010 36 11 B 13 1011 37 >>>
[1]align填充之对齐标记:
align char | Meaning |
'<' | 在右边填充 |
'>' | 在左边填充 |
'=' | 填充时强制在正负号与数字之间进行填充,只支持对数字的填充 |
'^' | 在两边填充 |
[2]sign数字之前导标记:
sign char | Meaning |
'+' | 强制对数字使用正负号 |
'-' | 仅对负数使用前导负号(这是默认的行为) |
' ' | 对正数使用一个' '作前导,负数仍以'-'为前导 |
[3]'#'被用来与type为'b'/'o'/'x'/'X'合作,对整数进行格式化,格式化后数字前分别以'0b'/'0o'/'0x'/'0X'为前导