浅谈python之格式化字符串

来源:互联网 发布:淘宝樱木花道家鞋真吗 编辑:程序博客网 时间:2024/06/05 03:19
C:\Users\Test>python --versionPython 3.6.2

0x01 str.rjust()

str.rjust # 右对齐str.center # 居中str.ljust # 左对齐
  • 三个方法殊途同归,笔者在此仅介绍str.rjust方法
>>>help(str.rjust)rjust(...)    S.rjust(width[, fillchar]) -> str    Return S right-justified in a string of length width. Padding is    done using the specified fill character (default is a space).
  • 一个必填参数,width,用于指定字符串总宽度
  • 一个选填参数,fillchar,width>字符串长度时,用于填充缺少的字符,默认空格
>>> "loulan".rjust(10)'    loulan'>>> "loulan".rjust(10,'*')'****loulan'
  • 当width小于字符串长度时,以字符串长度为主
>>>"loulan".rjust(3)'loulan'>>> "loulan".rjust(3,'*')'loulan'

0x02 格式化操作符:%

%在字符串中是格式化操作符

>>> "我是%s,大家好"%"楼兰"'我是楼兰,大家好'

1. 转化类型 the conversion types

conversion meaning ‘d’ 整数十进制(decimal),遇浮点数则采用去尾法转为整数 ‘i’ 整数十进制(decimal),遇浮点数则采用去尾法转为整数 ‘u’ 已经过时,相当于’d’ ‘o’ 八进制数值(octal),遇其他进制数字,则自动转为八进制 ‘x’ 十六进制(小写字符) ‘X’ 十六进制(大写字符) ‘e’ 科学计数法表示(e用小写字符) ‘E’ 科学记数法表示(E用大写字符) ‘f’ 浮点数十进制(小数点后保留六位,四舍五入) ‘F’ 浮点数十进制(小数点后保留六位,四舍五入) ‘g’ 当整数部分>六位有效数字时,采用科学记数法;反之,保留六位有效数字,五舍六入 ‘G’ 同’g’,科学技术法时,E用大写 ‘c’ 单个字符(接受单个字符,或者对应ascii码值,类似chr()函数) ‘r’ 字符串(相当于使用repr()函数) ’s’ 字符串(相当于使用str()函数) ‘a’ 字符串(相当于使用ascii()函数)
  • ascii()函数

    返回一个可打印的对象字符串方式表示,如果是非ascii字符就会输出\x,\u或\U等字符来表示。与python2版本里的repr()是等效的函数

    >>> ascii('楼兰')"'\\u697c\\u5170'"
  • repr()函数与str()函数

    • 相同 : 皆是将其他对象转化为字符串形式
    • 不同:函数str() 用于将值转化为适于人阅读的形式,
      而repr() 转化为适于解释器读取的形式
    >>> '%d'%123.123 #小数格式化为整数'123'>>> '%d'%0o17 #八进制格式化为十进制'15'>>> '%o'%123 #十进制的123格式化为八进制'173'>>> '%o'%0o17 #八进制的17格式化为八进制'17'>>> '%x'%123 #十进制的123格式化为十六进制(小写)'7b'>>> '%X'%123 #十进制的123格式化为十六进制(大写)'7B'>>> '%e'%123 #十进制的123格式化为科学记数法表示'1.230000e+02'>>> '%f'%123 #十进制整数123格式化为浮点数,小数点后默认保留六位'123.000000'>>> '%g'%123456 '123456'>>> '%g'%1234567 #整数部分超过六位时采用科学记数法'1.23457e+06'>>> '%g'%123456.666 #整数部分不足六位但是总位数超过六位时,默认保留六位有效数字,五舍六入'123457'>>> '%g'%1234.5 #总位数小于等于六位时,原样输出'1234.5'

2. 转化标识符 the conversion flag characters

conversion meaning ‘#’ 在进制数前面加标识符,如八进制的0o,十六进制的0x ‘n’ 指定转化后字符串的长度 ‘.m’ 指定小数点后保留的位数 ‘-‘ 指定对齐方式为,左对齐 ‘+’ 为正整数添加+符号
>>> '%#x'%123 '0x7b'>>> '%#o'%123'0o173'>>> '%10s'%'loulan''    loulan'>>> '%-10s'%'loulan''loulan    '>>> '%.3f'%123.123123'123.123'>>> '%+d'%123'+123'

0x03 format()

笔者在这里向大家极力推荐使用format函数来格式化字符串

相对于格式化操作符’%’来说,更为强大,而且格式化操作符已经属于古董级了

官方文档里称fomat为mini-language,可见一斑

format_spec : [ [ fill ] align ] [ sign ] [ # ] [ 0 ] [ width ] [ grouping_option ] [ .precision ] [ type ]

format_spec meaning fill 用于填充少于width的字符,使用前,必须先指定align的值 aligh 对齐方式,多先设置width sign 主要用于显示正数的+符号 width 设置字符串的宽度 grouping_options 自动分组,如数字三位一组1,000,000 .precision 设置小数点后保留的位数 type 设置格式化的类型,进制,浮点数,整数等

- align

options meaning ‘<’ 左对齐 ‘>’ 右对齐 ‘=’ 主要用于输出+00012这种格式时,即将sign放在width之前,而且sign不计入宽度(见下方例子) ‘^’ 居中

理论上要输出+00012这种格式时,

需要设置fill=’0’,然后align=’>’,然后sign=’+’,然后width=’5’;

即format_spec=’0>+5’

>>> format(12,'0>+5') #此时+计入宽度'00+12'

因此用到align=’=’

>>> format(12,'0=+5') #此时+未计入宽度'+00123'

- sign

options meaning ‘+’ 在正数前面添加+ ‘-‘ 在负数前面添加-(默认) ’ ‘ 正数时前面添加空格,负数时前面添加-
>>> format(123,'> 5')'  123'>>> format(-123,'> 5')' -123'

- grouping_option

options meaning “_” 用_分割整数部分,适用于其他进制 “,” 用,分割整数部分,只能用于十进制数字
>>> format(1200000.1234,',') #小数部分未分割'1,200,000.1234'>>> format(-1200000,',') #十进制是三位一组'-1,200,000'>>> format(-1200000,'_')'-1_200_000'>>> format(1234,'_b') #二进制是四位一组'100_1101_0010

- type

options meaning ‘b’ 二进制 ‘c’ character,即ascii码所对应的字符 ‘d’ 十进制 ‘e’ 科学记数法(e) ‘E’ 科学记数法(E) ‘f’ 浮点数,默认保留小数点后六位,四舍五入 ‘F’ Same as ‘f’, but converts nan to NAN and inf to INF.(尴尬,没理解) ‘g’ 当整数部分>六位有效数字时,采用科学记数法(e);反之,保留六位有效数字,五舍六入 ‘G’ 当整数部分>六位有效数字时,采用科学记数法(E);反之,保留六位有效数字,五舍六入 ‘n’ Same as ‘g’, except that it uses the current locale setting to insert the appropriate number separator characters.(尴尬,没理解) ‘o’ 八进制 ’s’ 字符串 ‘x’ 十六进制(abcdef) ‘X’ 十六进制(ABCDEF) ‘%’ 百分比

example

format即是str的一个方法,也是一个内置函数

  1. str.format()

    • 可以元素的名称进行访问

      >>> '{0}, {1}, {2}'.format('a', 'b', 'c')'a, b, c'>>> '{}, {}, {}'.format('a', 'b', 'c')  # python3.1之后'a, b, c'>>> '{2}, {1}, {0}'.format('a', 'b', 'c')'c, b, a'>>> '{2}, {1}, {0}'.format(*'abc')      # 可以利用*序列解包'c, b, a'>>> '{0}{1}{0}'.format('abra', 'cad')   # 可以重复访问一个值'abracadabra'
    • 可以通过元素的名称进行访问

      >>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')'Coordinates: 37.24N, -115.81W'
    • 在冒号的后面添加format_spec

      >>> '{:>10}'.format('aaa')'       aaa'
  2. format()

    • usage:
    format(value, format_spec='', /)
    >>> format('loulan','*^10')'**loulan**
    >>> format(123,'#o')'0o173'

因大多用法跟格式化操作符%相同,笔者便不再赘述

0x04 临别感言

呃。。上面type的n选项以及F选项,笔者实在是没测试明白,要是哪位大佬知道的话,还望不惜笔墨。
尴尬~~