• Python字符串格式化表达式和格式化方法


    Python格式化字符串由两种方式可以选择:一种是格式化表达式(Formatting Expression),一种是格式化方法(Formatting Method)。其中格式化表达式在全Python版本支持,而格式化方法在Python 2.6, Python 2.7和Python 3.1开始支持。

    格式化表达式与格式化方法的通用形式如下:

    '...%s...' %(values)           # 格式化表达式
    
    '...{}...'.format(values)    # 格式化方法

    格式化表达式

    格式化表达式的完整形式如下([ ]表示可选):

    '%[(keyname)[flags][width][.precision]typecode' %(values)

    keyname

    Python格式化字表达式支持使用keyname到values中的dictionary里面取对应的值:

    >>>'%(qty)d and %(food)s' %{'qty':1, 'food': 'spam'}
    1 and spam

    flags

    类似C语言的printf打印时使用的标志位,比如是否用0填充,是否显示数字的正负号

    width和precision

    width表示整个文本的宽度,precision表示小数位数。如果precision < width,不必补0满足width,;如果precision > width,优先precision。width和precision都支持*,如果是这样的话,它们对应的值由values当中的下一项来确定:

    >>>'%s and %*.*f' %('abc', 3, 5, 6.333333333)  # width = 3, presion = 5,优先precision
    'abc and 6.33333'
    
    >>>'%s and %*.*f' %('abc', 5, 3, 6.333333333)  # width = 5, presion = 3,不必补0满足width
    'abc and 6.333'

    typecode

    类似C语言printf打印时使用的typecode,比如s表示字符串,d表示整数等等

    格式化方法

    格式化方法的格式化字符串比较丰富,完整形式如下:

    '{fieldname component !conversionflag:formatspec}'.format(values)
    
    # 其中formatspec的完整形式如下,[ ]表示可选
    [[fill]align][sign][#][0][width][,][.precision][typecode]

    fieldname

    一个数字或者keywor参数名,数字用来标识从values中的第几个参数获取值,keyword参数形如name=value;如果不提供,就使用相对位置:

    >>>'{0} and {1}'.format(0, 1)
    '0 and 1'
    
    
    >>>'{a} and {b}'.format(a=0, b=1)
    '0 and 1'
    
    >>>'{a} and {b}.format({'a':0, 'b':1})  # 报错
    KeyError:'a'
    
    >>>'{} and {}'.format(0, 1)   # 不提供使用相对位置,不可以有的指定,有的不指定,会报错,相对位置在Python2.7和Python3.1中开始支持
    '0 and 1'

    component

    使用.name或者[index/key]的形式,对于从values中匹配的项,进一步根据.name取属性(如果是对象),或者根据index/key取值(如果这个匹配项是数组/字典):

    # .platform是sys的一个属性
    # [a]是values中字典的一个key
    # [2]是values中数组的index
    >>>'{0.platform} and {1[a]} and {2[2]}'.format(sys, {'a': 1}, [0, 1, 2, 3])
    'linux and 1 and 2'

    conversionflag

    conversionflag可以是r,s,或者是a,表示调用repr,str和ascii内置函数对匹配项进行转换

    fill和align

    fill可以是任何字符,除了'{'和'}',表示对齐时使用的填充字符;

    align可以是<,>,=,^,分别表示左对齐,右对齐,在数值符号后使用fill,居中对齐;

    >>>'{:$<10}'.format(100)    # 左对齐,7个$
    '$$$$$$$100'
    
    
    >>>'{:$=+10}'.format(100)   # 在符号后填充,6个$
    '+$$$$$$100'

    sign

    表示数值符号,可以是+,-或者空格:

    >>>'{: }'.format(100)   # 输出的100后面有空格
    ' 100'
    
    >>>'{: }'.format(-100)  # 输出100的空格被-占用
    '-100'

    #

    表示显示八进制或者十六进制的前导标志0或者0x:

    >>>'{:#0}'.format(100)  # 八进制表示
    '00144'
    
    >>>'{:#x}'.format(100) # 十六进制表示
    '0x64'

    ,(逗号,Python2.7和Python3.1开始有)

    逗号表示1000分隔符:

    >>>'{:,}'.format(10000)
    '10,000'

    width和precision

    width和precision的意思和格式化表达式中的一样,如果formatspec中包含嵌套的{},那么就和格式化标示符中使用*是一样的功能:

    >>>'{0:{1}.{2}}'.format(6.333333, 5, 3)   # 前面有两个空格
    '  6.33'

    typecode

    和格式化表达式typecode是必选的不一样,格式化方法中的typecode是可选的,如果不指定,表示可以接受任何类型,但是如果一旦指定,就必须和values中的匹配项类型一致,但是也有例外,看下面例子:

    >>>'{:s}'.format(6.33)   # 报错,不像格式化表达式一样,会自动转换为字符串
    ValueError:Unknown format code 's' for object of type 'float'
    
    >>>'{:i}'format(6.33)  # 报错,float无法转换成整型
    VlaueError:Unknown format code 'i' for object of type 'float'
    
    >>>'{:f}'.format(6)  # 可以整型转换成float没问题
    '6.000000'

    format方法

    除了使用格式化表达式和格式化方法之外,Python 2.6和Python 3.0还支持format方法进行格式化:

    >>>format(6.333, '.2f')
    '6.33'

    Template方法

    string模块的Template方法也可以格式化字符串:

    >>>import string
    >>>t = string.Template('$num = $title')   # 要替换的字段以$开头
    >>>t.substitue({'num': 7, 'title':'Strings'})  # 支持字典做参数
    '7 = Strings'
    
    >>>t.sustitute(num = 7, title = 'Strings')  # 支持keyword做参数
    '7 = Strings'
  • 相关阅读:
    中序遍历
    二叉树前序遍历
    A Real Stewart
    走遍美国 听写
    2016-12-12——2016-12-16友邻
    英语百日听力
    6.2分鱼问题两种解法
    Bootstrap组件1
    Bootstrap图标及另一个好用图标网站介绍
    Bootstrap全局CSS样式之图片
  • 原文地址:https://www.cnblogs.com/chaoguo1234/p/9163158.html
Copyright © 2020-2023  润新知