在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输入输出。Python中内置有对字符串进行格式化的操作 %。

模板

格式化字符串时,Python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的格式。Python用一个tuple将多个值传递给模板,每个值对应一个格式符。

比如下面的例子:

print("I'm %s. I'm %d year old" % ('Vamei', 99))

上面的例子中,

"I'm %s. I'm %d year old" 为我们的模板。%s为第一个格式符,表示一个字符串。%d为第二个格式符,表示一个整数。('Vamei', 99)的两个元素'Vamei'和99为替换%s和%d的真实值。 
在模板和tuple之间,有一个%号分隔,它代表了格式化操作。

整个"I'm %s. I'm %d year old" % ('Vamei', 99) 实际上构成一个字符串表达式。我们可以像一个正常的字符串那样,将它赋值给某个变量。比如:

a = "I'm %s. I'm %d year old" % ('Vamei', 99)
print(a)

我们还可以用词典来传递真实值。如下:

print("I'm %(name)s. I'm %(age)d year old" % {'name':'Vamei', 'age':99})

可以看到,我们对两个格式符进行了命名。命名使用()括起来。每个命名对应词典的一个key。

格式符

格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下:

%s    字符串 (采用str()的显示)

%r    字符串 (采用repr()的显示)

%c    单个字符

%b    二进制整数

%d    十进制整数

%i    十进制整数

%o    八进制整数

%x    十六进制整数

%e    指数 (基底写为e)

%E    指数 (基底写为E)

%f    浮点数

%F    浮点数,与上相同

%g    指数(e)或浮点数 (根据显示长度)

%G    指数(E)或浮点数 (根据显示长度)

%%    字符"%"

可以用如下的方式,对格式进行进一步的控制:

%[(name)][flags][width].[precision]typecode

(name)为命名

flags可以有+,-,' '或0。+表示右对齐。-表示左对齐。' '为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0表示使用0填充。

width表示显示宽度

precision表示小数点后精度

比如:

print("%+10x" % 10)
print("%04d" % 5)
print("%6.3f" % 2.3)

上面的width, precision为两个整数。我们可以利用*,来动态代入这两个量。比如:

print("%.*f" % (4, 1.2))

Python实际上用4来替换*。所以实际的模板为"%.4f"。

Python中内置的%操作符可用于格式化字符串操作,控制字符串的呈现格式。Python中还有其他的格式化字符串的方式,但%操作符的使用是最方便的。

另外python还有一个更强大的字符串处理函数  str.format()

语法

它通过{}和:来代替%。
“映射”示例

通过位置

1
2
3
4
5
6
In [ 1 ]: '{0},{1}' . format ( 'kzc' , 18 )
Out[ 1 ]: 'kzc,18'
In [ 2 ]: '{},{}' . format ( 'kzc' , 18 )
Out[ 2 ]: 'kzc,18'
In [ 3 ]: '{1},{0},{1}' . format ( 'kzc' , 18 )
Out[ 3 ]: '18,kzc,18'

字符串的format函数可以接受不限个参数,位置可以不按顺序,可以不用或者用多次,不过2.6不能为空{},2.7才可以。
通过关键字参数

1
2
In [ 5 ]: '{name},{age}' . format (age = 18 ,name = 'kzc' )
Out[ 5 ]: 'kzc,18'

通过对象属性

1
2
3
4
5
class  Person:
   def  __init__( self ,name,age):
     self .name, self .age =  name,age
     def  __str__( self ):
       return  'This guy is {self.name},is {self.age} old' . format ( self = self )

1
2
In [ 2 ]: str (Person( 'kzc' , 18 ))
Out[ 2 ]: 'This guy is kzc,is 18 old'

通过下标

1
2
3
In [ 7 ]: p = [ 'kzc' , 18 ]
In [ 8 ]: '{0[0]},{0[1]}' . format (p)
Out[ 8 ]: 'kzc,18'

有了这些便捷的“映射”方式,我们就有了偷懒利器。基本的python知识告诉我们,list和tuple可以通过“打散”成普通参数给函数,而dict可以打散成关键字参数给函数(通过和*)。所以可以轻松的传个list/tuple/dict给format函数。非常灵活。
格式限定符

它有着丰富的的“格式限定符”(语法是{}中带:号),比如:

填充与对齐
填充常跟对齐一起使用
^、<、>分别是居中、左对齐、右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
比如

1
2
3
4
5
6
In [ 15 ]: '{:>8}' . format ( '189' )
Out[ 15 ]: '   189'
In [ 16 ]: '{:0>8}' . format ( '189' )
Out[ 16 ]: '00000189'
In [ 17 ]: '{:a>8}' . format ( '189' )
Out[ 17 ]: 'aaaaa189'

精度与类型f
精度常跟类型f一起使用

1
2
In [ 44 ]: '{:.2f}' . format ( 321.33345 )
Out[ 44 ]: '321.33'

其中.2表示长度为2的精度,f表示float类型。

其他类型
主要就是进制了,b、d、o、x分别是二进制、十进制、八进制、十六进制。

1
2
3
4
5
6
7
8
In [ 54 ]: '{:b}' . format ( 17 )
Out[ 54 ]: '10001'
In [ 55 ]: '{:d}' . format ( 17 )
Out[ 55 ]: '17'
In [ 56 ]: '{:o}' . format ( 17 )
Out[ 56 ]: '21'
In [ 57 ]: '{:x}' . format ( 17 )
Out[ 57 ]: '11'

用,号还能用来做金额的千位分隔符。

1
2
In [ 47 ]: '{:,}' . format ( 1234567890 )
Out[ 47 ]: '1,234,567,890'

==========================================================================================

参考1:作者:Vamei 出处:http://www.cnblogs.com/vamei

参考2: http://www.jb51.net/article/63672.htm

Python字符串格式化 (%占位操作符)相关推荐

  1. {0}:{1:.4f}“.format(是什么意思 Python字符串格式化 (%占位操作符)

    https://www.cnblogs.com/zyq-blog/p/5946905.html 分析下面这段代码什么意思 "{0}:{1:.4f}".format(self.lab ...

  2. Python字符串格式化占位操作解析

    在Python中,在字符串中占位的语法格式是: %[(name)][flags][width]type 其中加中括号的内容是可选的. 简单的例子: str = "我的名字是:%s,我来自:% ...

  3. 这篇文章有点长,但绝对是保姆级的Python字符串格式化讲解

    相关文件 想学Python的小伙伴可以关注小编的公众号[Python日志] 有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!! Python学习交流群:773162165 前言 今 ...

  4. 深度梳理:史上最全 Python 字符串格式化讲解

    大家好,今天给大家分享一篇堪称史上最全对字符串格式化的文章.喜欢点赞.收藏.关注. 上个周末看到"pandas数据格式化处理"的时候,想着把(设置小数位数,设置百分位,设置千位分隔 ...

  5. python 字符串格式化是打印不同类型更简单一些

    Python 支持格式化字符串的输出 与 C 中 sprintf 函数一样的语法 下面写3中不同类型的数据合在一起打印 name = "张三丰" height = 1.88 wei ...

  6. java 按位置格式化字符串_Java字符串格式化,{}占位符根据名字替换实例

    我就废话不多说了,大家还是直接看代码吧~ import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import j ...

  7. python 字符串格式化%s_Python字符串格式化%s%d%f详解

    关于讨论输出格式化的问题,小编不是一时兴起,之前学习python的时候就经常遇到输出时"%d",一直没有仔细学习,今天又看到了,下面分享一个简单实例,python输出99乘法表: ...

  8. python的格式化输出学号_安利三个关于Python字符串格式化进阶知识

    点击蓝色"Python空间"关注我丫 加个"星标",每天一起快乐的学习 今 日 鸡 汤 名花倾国两相欢,常得君王带笑看. /前言/ 关于Python字符串格式化 ...

  9. python字符串format方法参数解释,一文秒懂!Python字符串格式化之format方法详解

    一文秒懂!Python字符串格式化之format方法详解 一文秒懂!Python字符串格式化之format方法详解 format是字符串内嵌的一个方法,用于格式化字符串.以大括号{}来标明被替换的字符 ...

最新文章

  1. 深入理解JVM—性能监控工具
  2. 请列举你了解的分布式锁_面试官想要你回答的分布式锁实现原理
  3. 二叉树(14)----由前序遍历和中序遍历重建二叉树,递归方式
  4. java输入键盘_java键盘输入
  5. 学习笔记(10):Python网络编程并发编程-粘包现象
  6. java 异常管理员_GitHub - kangZan/JCatch: Exception异常管理平台,支持Java、PHP、Python等多种语言...
  7. 解决mysql不是内部或外部命令
  8. Android FrameWork——ActivityManager框架
  9. 在文本框中插入@对象
  10. 阅历总结:运用IBM DB2数据库的详细事变
  11. 计算机多系统启动光盘制作,U盘多系统启动制作教程一步步教你做多系统启动盘...
  12. dell5580bios恢复出厂_如何进入戴尔笔记本bios及恢复bios出厂设置
  13. 安卓机被锁屏的6种解锁方法
  14. 拳皇重生服务器维护,用Kaillera打造拳皇等街机服务器教程
  15. iTween.MoveTo用法
  16. Android权限 权限等级 普通权限 敏感权限 申请权限
  17. 业务和商业才是技术的驱动力
  18. 关于OnCreate和OnDraw
  19. vue 格式化数值方法
  20. win10系统无法连接网络解决办法

热门文章

  1. Swift 使用 UISlider
  2. 如何轻松学习C语言编程!
  3. 前端报表导出成word文档(含echarts图表)
  4. 【码云周刊第 10 期】放码过来,四个男人的带头冲锋!!(内附 PPT 下载链接)...
  5. 二叉树遍历——先序遍历
  6. HTML5+JavaScript调用摄像头拍照或者摄像
  7. db2 如何 将 oracle CONNECT BY 移植到 DB2
  8. Java的Socket网络编程
  9. Mysql 8.0 --MGR多主+Atlas代理(提一下Mysql-router代理)
  10. 商业照明方案专用蓝牙芯片MS1656