Python String Formatting

摘要

Python 3.0 之后,str的对象支持一个method,str.format()。它是针对原来str所支持的%operator一个优化。这里简单地记录一些用法和例子。

常见使用方法

  1. 使用{}作为输出内容的占位符。

    1
    2
    >>>'{} {}'.format('Hello','World')
    'Hello World'

  2. 添加key指定输出对应的参数。key为数字时是参数位置的索引,为字符串时是关键字的索引。

    1
    2
    >>>'{1} {0} {a}'.format('Hello','World', a='!')
    'World Hello !'

  3. 结合*operator解析listdict

    1
    2
    3
    4
    5
    6
    >>>lst = ['Hello', 'World']
    >>>'{} {}'.format(*lst)
    Hello World
    >>>dct = {'a':'Hello', 'b':'World'}
    >>>'{a} {b}'.format(**dct)
    Hello World

  4. Py3.6后还可以用f-string的方式直接制定输出变量。

    1
    2
    3
    >>>string = 'Hello World'
    >>>f'{string}'
    Hello World

输出格式

  1. 格式化输出的用法如下面例子。:前的部分是上文提及的key,指定输出的内容。:后的.1.3分别指以小数点后保留1位和3位的格式输出。
1
2
3
4
5
>>>num = 0.1313
>>>'{:.1}'.format(num)
'0.1'
>>>f'{num:.3}'
'0.131'
  1. 格式的一般形式如下:

[[fill]align][sign][#][0][minimumwidth][.precision][type]

  1. 如上文提及[.precision]是指小数点后显示的位数。minimumwidth则是指输出的规定长度。
1
2
3
4
5
6
>>>f'{num:13}'
' 0.1313'
>>>f'{num:13.3}'
' 0.131'
>>>f'{string:13}'
'Hello World '
  1. [[fill]align]指定在内容长度小于规定长度时输出的位置和是否padding补全。 align<^>分别指居左,居中,居右。输出内容是字符串,默认居左。输出内容是数字,默认居右。align还有一种选择是=,指padding补全在符号后数字前。 fill指定padding的字符,默认为空格。

    1
    2
    3
    4
    5
    6
    >>>f'{num:0<13}'
    '0.13130000000'
    >>>f'{string:-^13}'
    '-Hello World-'
    >>>'{:0=13}'.format(-1) # fill:0 align:= minimumwidth:13
    '-000000000001'

  2. [sign]指显示数字符号的格式。+表示正负数均带符号。-表示正数不带符号,负数带负号。空格表示正数保留一个空格,负数带负号。

1
2
3
4
5
6
>>>'{:+} {:+}'.format(1, -1)
'+1 -1'
>>>'{:- :-}'.format(1, -1)
'1 -1'
>>>'{: } {: }'.format(1, -1)
' 1 -1'
  1. 参照datetime模块可以实现日期按照指定格式输出。关于%a等指代意义可以参照datetime的官方文档
1
2
3
>>>from datetime import datetime
>>>'{:%a %b %d %Y}'.format(datetime.now())
'Tue Aug 06 2019'

关于格式化其他参数的用法可以参照PEP 3101