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后面有空格
'' >>>'{: }'.format(-100) # 输出100的空格被-占用
'-100'

#

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

>>>'{:#0}'.format(100)  # 八进制表示
'' >>>'{:#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'

Python字符串格式化表达式和格式化方法的更多相关文章

  1. Python字符串连接的5种方法

    总结了一下Python字符串连接的5种方法: 加号 第一种,有编程经验的人,估计都知道很多语言里面是用加号连接两个字符串,Python里面也是如此直接用 "+" 来连接两个字符串: ...

  2. python字符串连接的三种方法及其效率、适用场景详解

    python字符串连接的方法,一般有以下三种:方法1:直接通过加号(+)操作符连接website=& 39;python& 39;+& 39;tab& 39;+& ...

  3. python字符串替换的2种方法

    python 字符串替换可以用2种方法实现:1是用字符串本身的方法.2用正则来替换字符串 下面用个例子来实验下:a = 'hello word'把a字符串里的word替换为python 1.用字符串本 ...

  4. python 字符串编码解码和格式化问题

    转自:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868191962 ...

  5. Python字符串拼接的6种方法(转)

    add by zhj: 对于多行字符串连接,第6种连接方法很方便,连接时不会添加额外的空格. 原文:http://www.cnblogs.com/bigtreei/p/7892113.html 1. ...

  6. Python字符串拼接的6种方法

    如有其他字符串拼接方法 欢迎留言提出哦 (示例版本为Py2) 1. 加号 第一种,有编程经验的人,估计都知道很多语言里面是用加号连接两个字符串,Python里面也是如此直接用 “+” 来连接两个字符串 ...

  7. 关于python字符串拼接的几种方法

    当时看完python的基本语法后 给朋友写了个美元概率换算 写完后拼接结果时候 发现压根不知道python怎么拼接字符串 看了些资料自己做了个总结 首先就是和JavaScript一样的拼接方式 nam ...

  8. python字符串复制的几种方法

    >>> list1 = [1,2] >>> id(list1) 50081032 >>> list2 = list1.copy() >> ...

  9. Python 字符串字典内置函数&方法

    Python字典包含了以下内置函数: 序号 函数及描述 1 cmp(dict1, dict2)比较两个字典元素. 2 len(dict)计算字典元素个数,即键的总数. 3 str(dict)输出字典可 ...

随机推荐

  1. ajaxSubmit 在ie9或360兼容中,form下是空的

    解决办法:在<head>....</head>中加入<meta http-equiv="X-UA-Compatible" content=" ...

  2. windows下MySQL免安装版配置教程mysql-8.0.12-winx64.zip版本

    引用1:https://blog.csdn.net/weixin_42831477/article/details/81589325 引用2:https://blog.csdn.net/qq_3193 ...

  3. Java三种代理模式

    本文转自:https://mp.weixin.qq.com/s/nBmbNP2mR7ei-lDsuOxjWg 代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象 ...

  4. 面试题——Java虚拟机

    一.运行时数据区域 Java虚拟机在执行Java程序的时候会把它所管理的内存划分为若干个不同的数据区域,这些区域各有用途: 程序计数器:(线程私有的) 程序计数器是一块较小的内存,可以看作是当前线程所 ...

  5. Hexo博客部署到个人服务器

    本文跳过阿里云创建git仓库.hexo部署到github的步骤,有需要的可以移步下面博客地址查看: 在阿里云服务器上创建git远程仓库 使用Hexo建立博客 一.服务器相关配置 本文使用hexo在本地 ...

  6. 使用Wamp搭建Php本地开发环境,HBuilder调试

    初涉Php,此处做点笔记,希望下次不要能够轻松应对,至少不要在入同一个坑 本文摘要: wamp和HBuilder和Mysql5.7的安装包 Wamp的使用,包括80端口,443端口的占用问题 HBui ...

  7. mysql索引建立原则

    看了网上一些网上关于创建索引的原则,在这里做一下总结: 1.尽量创建在使用频率较高的字段上,比如主键,外键,where总用到的字段,join是相关联的字段 2.如果表过大,一定要创建索引. 3.索引应 ...

  8. NoSQL入门第四天——事务与主从复制

    一.Redis的事务 1.是什么 可以一次执行多个命令,本质是一组命令的集合.一个事务中的 所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞 (更多请参见官网事务介绍) 2.能干什 ...

  9. 武汉Uber优步司机奖励政策

    ·武汉奖励前提 *必须满足当周平均评分4.7星及以上,且当周接单率70%及以上,才有资格获得奖励 *刷单和红线行为立即封号并取消当周全部奖励及车费! *从4月20日起,所有ETC和机场高速费用不参与奖 ...

  10. 老曹眼中的Linux基础

    Linux 几乎无处不在,不论是服务器构建,还是客户端开发,对操作系统的基本理解和基础技能的掌握对全栈来说都是必备的. 系统的选择 Linux发行版本大体分为两类,一类是商业公司维护的发行版本,一类是 ...