浅谈python之格式化字符串

C:\Users\Test>python --version
Python 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选项,笔者实在是没测试明白,要是哪位大佬知道的话,还望不惜笔墨。
尴尬~~

你可能感兴趣的:(python)