转载

Python字符串格式化

一、使用格式化符来格式化字符串:

Python支持的所有格式化符

格式化符 意义
'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'为前导

正文到此结束
Loading...