1  使用%符号进行格式

使用%符号进行字符串格式化的形式如下图所示,格式运算符%之前的部分为格式字符串,之后的部分为需要进行格式化的内容。

Python支持大量的格式字符,下表列出了比较常用的一部分。

格式字符

说明

%s

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

%r

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

%c

单个字符

%d

十进制整数

%i

十进制整数

%o

八进制整数

%x

十六进制整数

%e

指数 (基底写为e)

%E

指数 (基底写为E)

%f、%F

浮点数

%g

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

%G

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

%%

字符%

使用这种方式进行字符串格式化时,要求被格式化的内容和格式字符之间必须一一对应。
>>> x = 1235
>>> so = "%o" % x
>>> so
'2323'
>>> sh = "%x" % x
>>> sh
'4d3'
>>> se = "%e" % x
>>> se
'1.235000e+03'

#等价于str()

>>> "%s" % 65
'65'
>>> "%s" % 65333
'65333'

#使用元组对字符串进行格式化,按位置进行对应
>>> '%d,%c' % (65, 65) 
'65,A'

#试图将字符串转换为整数进行输出,抛出异常
>>> "%d" % "555"
TypeError: %d format: a number is required, not str
>>> '%s' % [1, 2, 3]
'[1, 2, 3]'

#可以使用str()函数将任意类型数据转换为字符串
>>> str((1, 2, 3))
'(1, 2, 3)'
>>> str([1, 2, 3])
'[1, 2, 3]'

2  使用format()方法进行字符串格式化

除了上一节介绍的字符串格式化方法之外,目前Python社区更推荐使用format()方法进行格式化,该方法非常灵活,不仅可以使用位置进行格式化,还支持使用关键参数进行格式化,更妙的是支持序列解包格式化字符串,为程序员提供了非常大的方便。

在字符串格式化方法format()中可以使用的格式主要有b(二进制格式)、c(把整数转换成Unicode字符)、d(十进制格式)、o(八进制格式)、x(小写十六进制格式)、X(大写十六进制格式)、e/E(科学计数法格式)、f/F(固定长度的浮点数格式)、%(使用固定长度浮点数显示百分数)。Python 3.6.x开始支持在数字常量的中间位置使用单个下划线作为分隔符来提高数字可读性,相应的,字符串格式化方法format()也提供了对下划线的支持。下面的代码演示了其中的部分用法:
>>> 1/3
0.3333333333333333

#保留3位小数

>>> '{0:.3f}'.format(1/3)
0.333

#格式化为百分数
>>> '{0:%}'.format(3.5)
'350.000000%'

#Python 3.6.0及更高版本支持
>>> '{0:_},{0:_x}'.format(1000000)
'1_000_000,f_4240'

#Python 3.6.0及更高版本支持
>>> '{0:_},{0:_x}'.format(10000000)
'10_000_000,98_9680'
>>> print("The number {0:,} in hex is: {0:#x}, in oct is {0:#o}".format(55))
The number 55 in hex is: 0x37, in oct is 0o67
>>> print("The number {0:,} in hex is: {0:x}, the number {1} in oct is {1:o}".format(5555, 55))
The number 5,555 in hex is: 15b3, the number 55 in oct is 67
>>> print("The number {1} in hex is: {1:#x}, the number {0} in oct is {0:#o}".format(5555, 55))
The number 55 in hex is: 0x37, the number 5555 in oct is 0o12663
>>> print("my name is {name}, my age is {age}, and my QQ is {qq}".format(name = "Dong", qq = "1234567", age = 38))
my name is Dong, my age is 38, and my QQ is 1234567
>>> position = (5, 8, 13)

#使用元组同时格式化多个值
>>> print("X:{0[0]};Y:{0[1]};Z:{0[2]}".format(position))
X:5;Y:8;Z:13
>>> weather = [("Monday", "rain"), ("Tuesday", "sunny"), ("Wednesday", "sunny"), ("Thursday", "rain"), ("Friday", "Cloudy")]
>>> formatter = "Weather of '{0[0]}' is '{0[1]}'".format
>>> for item in map(formatter, weather):
       print(item)

上面最后一段代码也可以改为下面的写法:
>>> for item in weather:
       print(formatter(item))

运行结果为:
Weather of 'Monday' is 'rain'
Weather of 'Tuesday' is 'sunny'
Weather of 'Wednesday' is 'sunny'
Weather of 'Thursday' is 'rain'
Weather of 'Friday' is 'Cloudy'

3  格式化的字符串常量

从Python 3.6.x开始支持一种新的字符串格式化方式,官方叫做Formatted String Literals,其含义与字符串对象的format()方法类似,但形式更加简洁。
>>> name = 'Dong'
>>> age = 39
>>> f'My name is {name}, and I am {age} years old.'
'My name is Dong, and I am 39 years old.'
>>> width = 10
>>> precision = 4
>>> value = 11/3
>>> f'result:{value:{width}.{precision}}'
'result:     3.667'

4  使用Template模板进行格式化

Python标准库string还提供了用于字符串格式化的模板类Template,可以用于大量信息的格式化,尤其使用于网页模板内容的替换和格式化。例如:
>>> from string import Template

#创建模板

>>> t = Template('My name is ${name}, and is ${age} yeare old.')
>>> d = {'name':'Dong', 'age':39}

#替换

>>> t.substitute(d)
'My name is Dong, and is 39 yeare old.'
>>> tt = Template('My name is $name, and is $age yeare old.')
>>> tt.substitute(d)
'My name is Dong, and is 39 yeare old.'
>>> html = '''<html><head>${head}</head><body>${body}</body></html>'''
>>> t = Template(html)
>>> d = {'head':'test', 'body':'This is only a test.'}
>>> t.substitute(d)
'<html><head>test</head><body>This is only a test.</body></html>'

本文节选自《Python程序设计开发宝典》(董付国著,清华大学出版社,2017.8,ISBN:9787302472100)

Python 3.6.x字符串格式化方法小结相关推荐

  1. python的三种字符串格式化方法

    刚入门python的同学,特别是,没有系统的学习过python,而是学过别的语言,直接上手python的同学,怕是还不是很了解python强大的字符串格式化方法 1.最方便的 print 'hello ...

  2. 深度对比Python的3种“字符串格式化”方法,看看你喜欢哪一种?

    3种字符串格式化工具的简单介绍 python2.5版本之前,我们使用的是老式字符串格式化输出%s. 从python3.0版本开始起(python2.6同期发布),Python中同时支持两个版本的格式化 ...

  3. [转载] 深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?

    参考链接: 使用Python 3的f字符串进行字符串格式化 3种字符串格式化工具的简单介绍 python2.5版本之前,我们使用的是老式字符串格式化输出%s. 从python3.0版本开始起(pyth ...

  4. python3中format方法_[翻译]python3中新的字符串格式化方法-----f-string

    从python3.6开始,引入了新的字符串格式化方式,f-字符串. 这使得格式化字符串变得可读性更高,更简洁,更不容易出现错误而且速度也更快. 在本文后面,会详细介绍f-字符串的用法. 在此之前,让我 ...

  5. python字符串格式化方法 format函数的使用

    python从2.6开始支持format,新的更加容易读懂的字符串格式化方法, 从原来的% 模式变成新的可读性更强的 花括号声明{}.用于渲染前的参数引用声明, 花括号里可以用数字代表引用参数的序号, ...

  6. 第3.8节 Python百分号占位符的字符串格式化方法

    一.    概念         格式化字符串就是将一些变量转换为字符串并按一定格式输出字符串,包括指定字符的位置.对齐方式.空位补充方式等.Python提供了多种字符串格式设置方法.本节先介绍一种简 ...

  7. python字符串出栈方法_说说Python有几种字符串格式化?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  8. 史上最全的字符串格式化方法,学这些就够用了

    一.思考 1.什么是字符串格式化? ◆ 将变量(对象)的值填充到字符串中 ◆ 在字符串中解析Python表达式 ◆ 对字符串进行格式化显示 左对齐.右对齐.居中对齐 保留数字有效位数 2.你学过的字符 ...

  9. C++ - std::string字符串格式化方法总结

    文章目录 1 C++ std::string字符串格式化 1.1 C语言中的字符串格式化 1.2 C++使用std::stringstream进行字符串格式化 1.3 开源的C++单个头文件的字符串格 ...

最新文章

  1. 在Windows上搭建Git Server
  2. Spring IOC 知识点总结,写得太好了!
  3. 关于longlong与位运算
  4. ajax 填充,自动填充ajax请求
  5. 352. 将数据流变为多个不相交区间
  6. Tomcat JVM 初始化加大内存
  7. mysql 无缓冲的查询_MySQL缓冲和无缓冲查询对比
  8. Java习题>|异常>|throw自定义异常小案例
  9. python await timeout_python等待10秒执行下一命令的方法
  10. JS中Ajax的方法和应用
  11. 斐波那契数列Java
  12. python Splinter 12306抢票
  13. C语言变量及其生命周期
  14. 谈谈自我介绍与第一印象
  15. sre工程师_什么是SRE? 现场可靠性工程师的重要作用
  16. sklearn中make_blobs模块使用
  17. 小暑 |入伏前,这样做,宝宝长高高更聪明!
  18. 计算机中c语言的应用特点,计算机中C语言应用特点.doc
  19. 2021-12-15 股票模拟交易心得10
  20. 【信奥赛一本通】1253:抓住那头牛(详细代码)

热门文章

  1. android 服务设置在哪里,如何在Android中为我的服务设置“控制面板”?
  2. beatsx三闪红灯是什么意思_飞机座椅上写的quot;taxiquot; 什么意思?出租车?
  3. 玩转 SpringBoot 2 之发送邮件篇
  4. 玩转 SpringBoot 2 快速整合 | Thymeleaf 篇
  5. android状态栏背景色和图标颜色更改总结
  6. 任意电脑登录MySQL_使用批处理命令注册运行mysql数据库,无需注册mysql服务,可以在任意电脑登录使用...
  7. java guava_java项目中使用guava的工具包的心得
  8. 几何常用算法与判断线段相交【转】
  9. 关于 django 的时区设置与MySQL 时间相差8小时
  10. 1086: [SCOI2005]王室联邦