s.format()方法
功能:格式化字符串。
用法:s是包含替换字段的原始字符串,在s.format()中指定参数,会将该参数值替换掉原始字符串中的替换字段,如:
>>> s = 'hello {0},welcom to {1}'
>>> s.format('Jack','my school')
'hello Jack,welcom to my school'
在s中{0},{1}是替换字段,执行s.format()后,会依次用format()中的参数替换掉这些替换字段。{0},用第一个参数替换,{1}用第二个字段替换,依次替换
如果在原始字符串中需要输入"{","}",使用"{{","}}",示例如下:
>>> s = "{{{0}+{1}}}={2}"
>>> s
'{{{0}+{1}}}={2}'
>>> s.format(1,2,1+2)
'{1+2}=3'
进一步深入:
字段名的概念:
这里的字段名是s.format()原始字符串中的替换字符串,字段名或者"{"和"}"包围起来的整数(示例见上),或者是s.format()参数中指定的参数名称,示例如下:
>>> s = "{{{0}+{1}}}={2}"
>>> s
'{{{0}+{1}}}={2}'
>>> s.format(1,2,1+2)
'{1+2}=3'
如果同时使用关键字参数和位置参数,关键字参数总是在位置参数之后
字段名可以引用集合数据类型内的元素,示例如下:
>>> digits=['one','two','three','four','five','six','seven','eight','nine','ten']
>>> s='{digits[0]}=1,{digits[1]}=2'
>>> s.format(digits=digits)
'one=1,two=2'
s.format()中的参数也可以使用字典,在原始字符串中使用名称字段引用字典中的内容
转换
decimal.Decimal类型数据有两种不同表现形式,如:
>>> x = decimal.Decimal('133.234')
>>> x
Decimal('133.234') (1)
>>> print(x)
133.234 (2)
其中(1)是表象形式,(2)是字符串形式。
在指定其显示格式时,可以在替换字段中指定使用表象形式,还是字符形式,示例如下:
>>> x=decimal.Decimal('132.40233')
>>> "{0}--{0!s}--{0!r}".format(x)
"132.40233--132.40233--Decimal('132.40233')"
如果在替换字段中有指定转换格式字符是,默认字符串形式(s),如果是表象形式,则写上r.
格式规约
整数、浮点数、字符串的默认方式多数情况是可以满足需要的,但如果需要更加细致的控制,使用格式规约字符串
字符串中的格式规约:
在替换字段后面加一冒号(:)引入字符串格式规约的具体内容。冒号后的内容依次是填充字符(可选)、对齐字符(<左对齐、^居中对齐、>右对齐)、最小宽度、句点、最大宽度。其中句点、最大宽度是可选的,只有指定了最大宽度才需要再现句点。在指定填充字符时,必须同时指定对齐方式。
示例:
>>> s = 'My coat and my umbrella please.'
>>> '{0}'.format(s) #默认格式
'My coat and my umbrella please.'
>>> '{0:50}'.format(s) #指定50字符宽度
'My coat and my umbrella please. '
>>> '{0:=<50}'.format(s) #使用=填充,左对齐,宽度 50
'My coat and my umbrella please.==================='
>>> '{0:-^50}'.format(s) #使用-填充,中对齐,宽度50
'---------My coat and my umbrella please.----------'
>>> '{0:+>50}'.format(s) #+号填充,右对齐,宽度50
'+++++++++++++++++++My coat and my umbrella please.'
>>> '{0:.10}'.format(s) #最大宽度10
'My coat an'
>>> '{0:.<50}'.format(s)
'My coat and my umbrella please....................'
在最后的示例中,必须指定对齐字符,否则,会认为最大宽度是50,而不是最小宽度是50
格式化规约中的填充符,对齐符号,宽度等都可能使用变量指定
>>> '{0:{1}{2}{3}}'.format(s,'.','^',50) #使用.填充,中对齐,宽度50,但这些规约符号都是以替换字段的方式指定的。
'.........My coat and my umbrella please...........'
整数规约
整数规约可以控制整数的填充、字段内对齐、符号、最小宽度、基数。整数规约也是通过冒号(:)引入的。具体格式依次是:一个填充符(可选)、对齐符号(<左对齐、^中间对齐、>左对齐、=在符号与整数之间填充0)、是否输出整数符号(可选,+必须输出符号,无论正负;-只有负是输出符号;空格表示正数输出空格,负数输出负号)、最小宽度值,其前可以#号引导,以便获取基于某种进制的引导符号,也可以是0引导,对齐时,用0来填充。#后还可以是b、o、d、x、X分别对应二进制、八进制、十进制、十六进制小写、十六进制大写。#后还以是c、n,对应输出整数的Unicode字符或者是场所敏感的数字。
示例:
>>> '{0:0=12}'.format(8756489)#宽度12,用0在符号来数字之间填充
'000008756489'
>>> '{0:0=12}'.format(-8756489)#宽度12,用0在符号来数字之间填充
'-00008756489'
>>> '{0:012}'.format(-8756489)#宽度12,用0填充
'-00008756489'
>>> '{0:012}'.format(8756489) #宽度12,用0填充
'000008756489'
对齐示例:
>>> '{0:*<15}'.format(18233297) #宽度15,数字左对齐用*填充
'18233297*******'
>>> '{0:*>15}'.format(18233297) #宽度15,数字右对齐用*填充
'*******18233297'
>>> '{0:*^15}'.format(18233297) #宽度15,数学中对齐*填充
'***18233297****'
>>> '{0:*^15}'.format(-18233297) #宽度15,数字中对齐*填充
'***-18233297***'
>>> '{0:*=15}'.format(-18233297) #宽度15,数字右对齐,*填充,注意填充的位置
'-******18233297'
符号示例:
>>> '[{0: }][{1: }]'.format(32156,-32156) #正号用空格显示,负号正常显示
'[ 32156][-32156]'
>>> '[{0:+}][{1:+}]'.format(32156,-32156) #必须显示符号,无论正负
'[+32156][-32156]'
>>> '[{0:-}][{1:-}]'.format(32156,-32156) #只显示负数的符号
'[32156][-32156]'
不同基数显示示例:
>>> '{0:b}--{0:o}--{0:x}--{0:X}'.format(123546)
'11110001010011010--361232--1e29a--1E29A'
>>> '{0:#b}--{0:#o}--{0:#x}--{0:#X}'.format(123546)
'0b11110001010011010--0o361232--0x1e29a--0X1E29A'
浮点数规约:
浮点数规约可以指定如下内容,填充(可选)、字段对齐、符号、最小宽度、十进制表示小数点后的位数,以及以标准形式,指数形式、百分数形式输出点数。
浮点数规约格式与整数字约格式基本相同,只是在规约格式的结尾有区别,在指定最小宽度后,可以加上可选的点和小数宽度。后面还可以跟一个e、E、f、g,用于指定输出浮点数的格式,对应小写e指数形式、大写E指定形式、浮点数形式、通常格式(数值不是告别大小相当于f,当数值相当大时相当于e)示例如下:
>>> amount = (10**3)*math.pi
>>> '[{0:12.2e}]--[{0:12.2f}]'.format(amount) #宽度12,小数位数2位,格式分别是指数和浮点数
'[ 3.14e+03]--[ 3141.59]'
>>> '[{0:*>12.2e}]--[{0:*>12.2f}]'.format(amount) #宽度12,*填充,右对齐,小数位数2位,格式分别是指数和浮点数
'[****3.14e+03]--[*****3141.59]'
>>> '[{0:*>+12.2e}]--[{0:*>+12.2f}]'.format(amount) #宽度12,*填充,右对齐,必须显示符号,小数位数2位,格式分别是指数和浮点数
'[***+3.14e+03]--[****+3141.59]'