python 字符串格式化语法_Python 字符串格式化操作 - format方法

建议使用format()方法

字符串操作 对于 %, 官方以及给出这种格式化操作已经过时,在 Python 的未来版本中可能会消失。 在新代码中使用新的字符串格式。因此推荐大家使用format()来替换 %.

format 方法系统复杂变量替换和格式化的能力,因此接下来看看都有哪些用法。

format()

这个方法是来自 string 模块的Formatter类里面的一个方法,属于一个内置方法。因此可以在属于 string 对象的范畴都可以调用这个方法。

语法结构

这个方法太强大了,官方的用户是。

replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"

field_name ::= arg_name ("." attribute_name | "[" element_index "]")*

arg_name ::= [identifier | integer]

attribute_name ::= identifier

element_index ::= integer | index_string

index_string ::= +

conversion ::= "r" | "s" | "a"

format_spec ::=

针对 format_spec 的用法如下

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

fill ::=

align ::= "" | "=" | "^"

sign ::= "+" | "-" | " "

width ::= integer

precision ::= integer

type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

说明:

< 强制字段在可用空间内左对齐

> 强制字段在可用空间内右对齐

= 填充位于符号(如果有的话)之后,但位于数字之前

^ 强制场位于可用空间的中心

常用的方法有下面几个,format()方法中的槽除了包括参数序号,还可以包括格式控制信息。此时,槽的内部样式如下:

{: }

"{" [[identifier | integer]("." identifier | "[" integer | index_string "]")*]["!" "r" | "s" | "a"] [":" format_spec] "}"

其中,用来控制参数显示时的格式,包括:,<.>6 个字段,这些字段都是可选的,可以组合使用,逐一介绍如下。

常用表达

指定位置

>>> '{0}, {1}, {2}'.format('a', 'b', 'c')

'a, b, c'

>>> '{}, {}, {}'.format('a', 'b', 'c') # 3.1+ only

'a, b, c'

>>> '{2}, {1}, {0}'.format('a', 'b', 'c')

'c, b, a'

>>> '{2}, {1}, {0}'.format(*'abc') # unpacking argument sequence

'c, b, a'

>>> '{0}{1}{0}'.format('abra', 'cad') # arguments' indices can be repeated

'abracadabra'

如果要显示 { }

>>> '{{}}, {}, {}'.format('b', 'c')

'{}, b, c'

指定名称

>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')

'Coordinates: 37.24N, -115.81W'

>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}

>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)

'Coordinates: 37.24N, -115.81W'

指定属性 对于复数来说,有2个属性。如果不知道属性具体名字是什么,可以用dir来查看。

>>> c = 3-5j

>>> dir(c)

[....... 'imag', 'real']

>>> ('The complex number {0} is formed from the real part {0.real} '

... 'and the imaginary part {0.imag}.').format(c)

'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'

>>> class Point:

... def __init__(self, x, y):

... self.x, self.y = x, y

... def __str__(self):

... return 'Point({self.x}, {self.y})'.format(self=self)

...

>>> str(Point(4, 2))

'Point(4, 2)'

访问数组之类

>>> coord = (3, 5)

>>> 'X: {0[0]}; Y: {0[1]}'.format(coord)

'X: 3; Y: 5'

!s 区别 !r

>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')

"repr() shows quotes: 'test1'; str() doesn't: test2"

文本对齐

下面文本居中和左有对齐

>>> '{:<30}'.format('left aligned')

'left aligned '

>>> '{:>30}'.format('right aligned')

' right aligned'

>>> '{:^30}'.format('centered')

' centered '

>>> '{:*^30}'.format('centered') # use '*' as a fill char

'***********centered***********'

指定类型

b: 输出整数的二进制方式; c: 输出整数对应的 Unicode 字符; d: 输出整数的十进制方式; o: 输出整数的八进制方式; x: 输出整数的小写十六进制方式; X: 输出整数的大写十六进制方式;

>>> '{:+f}; {:+f}'.format(3.14, -3.14) # show it always

'+3.140000; -3.140000'

>>> '{: f}; {: f}'.format(3.14, -3.14) # show a space for positive numbers

' 3.140000; -3.140000'

>>> '{:-f}; {:-f}'.format(3.14, -3.14) # show only the minus -- same as '{:f}; {:f}'

'3.140000; -3.140000'

逗号作为数千个分隔符:

>>> '{:,}'.format(1234567890)

'1,234,567,890'

表示百分比

>>> points = 19

>>> total = 22

>>> 'Correct answers: {:.2%}.'.format(points/total)

'Correct answers: 86.36%'

特定格式,比如日期

>>> import datetime

>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)

>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)

'2010-07-04 12:15:58'

骚操作

可以用来输出一个表格,有点类似三方库prettytable的效果

>>> width = 5

>>> for num in range(5,12):

... for base in 'dXob': # 分别为10/16/8/2进制

... print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')

... print()

...

5 5 5 101

6 6 6 110

7 7 7 111

8 8 10 1000

9 9 11 1001

10 A 12 1010

11 B 13 1011

高级用法 - 模板字符串

如果你是一个看Python语言工具的源码的话,会发现这么一个用法 - 模板字符串,比如robot里面__init__.py里面就有这么一个用法。先看例子

from string import Template

errorMessageTemplate = Template("""$reason

RIDE depends on wx (wxPython). .....""")

....

print(errorMessageTemplate.substitute(reason="wxPython not found."))

如果是有问题就会打印

wxPython not found.

RIDE depends on wx (wxPython). .....

首先要导入模板Template,看看里面有哪些属性

>>> from string import Template as t

>>> dir(t)

[.....'braceidpattern', 'delimiter', 'flags', 'idpattern', 'pattern', 'safe_substitute', 'substitute']

>>> s = Template('$who likes $what')

>>> s.substitute(who='tim', what='kung pao')

'tim likes kung pao'

>>> d = dict(who='tim')

>>> Template('Give $who $100').substitute(d)

Traceback (most recent call last):

[...]

ValueError: Invalid placeholder in string: line 1, col 10

>>> Template('$who likes $what').substitute(d)

Traceback (most recent call last):

[...]

KeyError: 'what'

>>> Template('$who likes $what').safe_substitute(d)

'tim likes $what'

相关阅读

看完了是不是对 format 已经有很深的认识了吧。赶紧动起来,实践一下。

Hi,Sup,如果觉得我写的不错,不妨帮个忙

1、可以关注我的公众号「程序员汇聚地」,每天分享互联网前沿技术,让你的琐碎时间不在无聊,听说关注了的人越来越优秀。

2、顺手点个赞呗,可以让更多的人看到这篇文章,顺便激励下我,嘻嘻。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值