公众号:尤而小屋
作者:Peter
编辑:Peter

在上一篇Python字符串初相识中,我们介绍了字符串的很多基础内容。本文中介绍的字符串一个非常重要的知识点:字符串格式化输出。

python入门教程-字符串初相识

格式化怎么理解?简答来说:就是让字符串按照我们设定的格式来输出,达到我们想要的结果。主要是有4种方式:

  • %:基于占位符的格式化

  • format()函数的格式化:重点掌握

  • f-string格式化:重点掌握

  • 字符串模板函数string template

一、占位符%

常见格式符

格式化符号其实是为真实的值预留出一个空位,而且还可以控制显示的格式。格式符包含一个类型码,用来显示不同的数据类型,比如字符串、二进制、指数等。常见的不同的占位符如下:

  • %s:   字符串 (采用str()的显示),常用

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

  • %c:   单个字符,格式化字符及其ASCII码

  • %b:   二进制整数

  • %u:   格式化无符号整数,常用

  • %d:   格式化十进制整数,常用

  • %i:   十进制整数

  • %o:   八进制整数

  • %x:   十六进制整数

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

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

  • %e:   指数 (基底写为e),用科学计数法格式化浮点数

  • %E:   指数 (基底写为E),用法同%e

  • %f:   浮点数,格式化浮点数字,可以指定小数点后面的精度,常用

  • %F:   浮点数,与%f相同

  • %%:   字符“%”,用来显示百分号%

对齐问题

关于对齐问题:

1. ^:居中对齐
2. >:右对齐
3. <:左对齐
4. +、-:显示正负号

语法形式

常用的语法形式为:%[(name)][flags][width].[precision] typecode

  • (name):参数的名称,可以省略;如果使用必须加上()

  • flags:对齐标志位;可以是+、-、“”、0;+右对齐,-左对齐,""填充一个空格;0表示左侧使用0填充

  • width:显示的宽度

  • precision:小数点后的精度

多种类型连用

print("%9.3f" % 2.3)
    2.300  #  前面4个空格
  • 第一个 % 后面的内容为显示的格式说明,9 为显示宽度,3 为小数点位数,f 表示输出为浮点数类型

  • 第二个 % 后面为显示的内容来源,输出结果默认为右对齐,2.300 长度为 5,故前面有4个空格

print("%+9.3f" % 2.3)  # 带上+符号输出,9表示宽度,3表示小数位
   +2.300
print("%-9.3f" % 2.3)  # -表示左对齐输出
2.300
print("%-9.3f" % -2.3)
-2.300
# 我们显示声明3个变量name = "Yule Cottage"  # 字符串类型
age = 25  # 整数类型
height = 1.76   # 浮点数类型
# 1、浮点数默认是6位小数
# 2、%f和%F相同print("我是:%s,年龄: %d,身高是:%f" % (name,age,height))
我是:Yule Cottage,年龄: 25,身高是:1.760000
# 指定浮点数的小数位print("我是:%s,年龄: %d,身高是:%.3f" % (name,age,height))
我是:Yule Cottage,年龄: 25,身高是:1.760

下面的代码是通过字典对的形式来传入不同的数据类型,字典(后面会介绍python的字典)的值就是待格式的内容。

需要注意的是name、age、height必须写在%号的后面

print("我是:%(name)s,年龄: %(age)d,身高是:%(height).3f" % {"name":name,"age":age,"height":height})
我是:Yule Cottage,年龄: 25,身高是:1.760

输出不同进制

print("八进制:%o,十进制:%i,十六进制:%x" %(age,age,age))
八进制:31,十进制:25,十六进制:19
# print("二进制:%b" %(age))   # 二进制不能使用
bin(age)  # 通过bin函数查看
'0b11001'

输出的宽度、精度等设置

number = 1.23456789# 宽度为10,保留小数点后4位,默认是右对齐
print("%10.4f" % number)
    1.2346
print("%-10.4f" % number)  # -符号表示左对齐,显示4位小数
1.2346
# 右对齐,保留10位小数,不足的用0补齐print("%10.10f" % number)
1.2345678900
print("%-10.8f" % number)  # 左对齐,保留8位小数
1.23456789
# 左对齐,保留7位小数,会自动地进行四舍五入print("%-10.7f" % number)
1.2345679

下面是针对字符串的宽度等输出设置:

name
'Yule Cottage'
print("%.10s" % name) # 9个字母+一个空格:左对齐
Yule Cotta
print("%.15s" % name) # 如果位数不够,直接全部输出
Yule Cottage
print("%10.6s" % name) # 右对齐,取出6个字符
    Yule C

解释:总长度为10,前面4个空格,加上4+一个空格+C

二、format格式化

从python2.6+开始,新增了一种格式化字符串的函数str.format,可以说极大地增强了字符串格式化的功能,基本语法是通过{}:来代替占位符%

  • 接收多个不限制的参数

  • 位置可以不按照顺序

语法形式

{<参数序号>:<格式控制标记>} ,中间有一个冒号,不能省略!!!

name = "Yule Cottage"  # 字符串类型
age = 25  # 整数类型
height = 1.76   # 浮点数类型
sex = "男"

多个参数连用

# 1、不设置位置
print("名字是:{},年龄是:{},身高是:{},性别:{}".format(name,age,height,sex))
名字是:Yule Cottage,年龄是:25,身高是:1.76,性别:男
# 2、设置位置参数print("名字是:{0},年龄是:{1},身高是:{2},性别:{3}".format(name,age,height,sex))
名字是:Yule Cottage,年龄是:25,身高是:1.76,性别:男
# 设置位置参数
# 索引从0开始;2号位对应的heightprint("名字是:{0},身高是:{2},年龄是:{1},性别:{3}".format(name,age,height,sex))
名字是:Yule Cottage,身高是:1.76,年龄是:25,性别:男
print("性别:{3},身高是:{2},名字是:{0},年龄是:{1}".format(name,age,height,sex))
性别:男,身高是:1.76,名字是:Yule Cottage,年龄是:25
# 3、元组形式
# 使用*进行解析information = ("Peter",25)print("姓名是:{},年龄是:{}".format(*information))
姓名是:Peter,年龄是:25
# 4、字典形式
# 参数为字典时候,通过**进行解析配对print("名字是:{name},年龄是:{age},身高是:{height},性别:{sex}".format(**{"name":name,"age":age,"height":height,"sex":sex}))
名字是:Yule Cottage,年龄是:25,身高是:1.76,性别:男
# 5、直接变量赋值print("名字是:{name},年龄是:{age},身高是:{height},性别:{sex}".format(name="Yule Cottage",age="2岁",height="1.75m",sex="男"))
名字是:Yule Cottage,年龄是:2岁,身高是:1.75m,性别:男

对齐

宽度为20,我们实现居中、靠左、靠右对齐

name
'Yule Cottage'
print("{:^20s}".format(name))  # 居中
print("{:>20s}".format(name))  # 靠右
print("{:<20s}".format(name))  # 靠左
    Yule Cottage    Yule Cottage
Yule Cottage

数值多种形式

首先我们还是看看对齐问题,浮点数的对齐只保留6位小数:

pi = 3.1415926print("{:^20f}".format(pi))  # 居中  # 默认只保留6位小数
print("{:>20f}".format(pi))  # 靠右
print("{:<20f}".format(pi))  # 靠左
      3.141593      3.141593
3.141593

看看不同情况下的输出格式,浮点数需要带上小数点,默认全部是左对齐:

# 不同的输出方式print("{}".format(pi))  # 原数据
print("{:.2f}".format(pi))   # 2位小数
print("{:>.10f}".format(pi))  # 位数不足,右侧补0
print("{:.4%}".format(pi))  # 百分比输出
print("{:.2e}".format(pi))
3.1415926
3.14
3.1415926000
314.1593%
3.14e+00

填充

sex
'男'
print("{0:30}".format(sex))  # 字符串默认左对齐
print("{:>30}".format(sex))  # 改成右对齐
print("{0:30}".format(age))  # 数值类型默认右对齐
print("{:<30}".format(height)) # 改成左对齐
男                             男25
1.76
# 指定填充的字符print("{:*>30}".format(sex))  # *
print("{:+>30}".format(sex))  # +
print("{:+^30}".format(sex))  # 居中后填充+
print("{:+<30}".format(height)) # +
*****************************男
+++++++++++++++++++++++++++++男
++++++++++++++男+++++++++++++++
1.76++++++++++++++++++++++++++

千位分隔符

主要是用来显示数字的千位分隔符,在货币金额中使用的比较多:

b = 1003005000600print("{:-^20}".format(b))   # 不用逗号
print("{:-^20,}".format(b))  # 用逗号
---1003005000600----
-1,003,005,000,600--
# 小数的千位分隔符显示print("{0:-20,}".format(12567.98760))  # 不填充
print("{0:-^20,}".format(12567.98760))  # 居中+填充
print("{0:->20,}".format(12567.98760))  # 右对齐+填充
print("{0:-<20,}".format(12567.98760))  # 左对齐+填充
         12,567.9876
----12,567.9876-----
---------12,567.9876
12,567.9876---------

精度

精度输出的时候前面必须有一个小数点开头,具有两层含义:

  • 浮点数:表示输出小数位的有效位数

  • 字符串:精度表示输出的最大长度

pi
3.1415926
"{:.3f}".format(pi)
'3.142'
"{:30.5f}".format(pi)  # 小数点后5位,整体宽度30
'                       3.14159'
"{:*^30.5f}".format(pi)  # 小数点后5位,宽度30,居中后补充*
'***********3.14159************'
name
'Yule Cottage'
"{:.4}".format(name)  # 最大长度为4
'Yule'
"{:.6}".format(name)  # 输出最大长度为6
'Yule C'

多种输出类型

表示输出整数和浮点数类型的格式规则。对于整数类型,输出格式包括6 种:

  • c: 输出整数对应的 Unicode 字符;

  • b: 输出整数的二进制方式;

  • o: 输出整数的八进制方式;

  • d: 输出整数的十进制方式;

  • x: 输出整数的小写十六进制方式;

  • X: 输出整数的大写十六进制方式;

下面的例子表示的是365的二进制、Unicode字符、十进制、小写16进制和大写的16进制的不同输出格式:

"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(365)
'101101101,ŭ,365,555,16d,16D'

如果是浮点数类型,那么输出格式包括4种:

  • e: 输出浮点数对应的小写字母 e 的指数形式;

  • E: 输出浮点数对应的大写字母 E 的指数形式;

  • f: 输出浮点数的标准浮点形式;

  • %: 输出浮点数的百分形式。

浮点数输出时尽量使用<.精度>表示小数部分的宽度,有助于更好控制输出格式。

"{0:e},{0:E}".format(3.1415)
'3.141500e+00,3.141500E+00'
"{0:f},{0:F}".format(3.1415)
'3.141500,3.141500'
"{0:%}".format(3.1415)  # 保留6位小数,百分比输出
'314.150000%'
"{0:.2%}".format(3.1415)  # 2位小数,百分比输出
'314.15%'

三、f-string

f-string是python3.6开始引入的新字符串格式化方法。其实它的方法很多和format是类似的,下面通过具体的例子来讲解。

简单例子

首先我们看一个简单的例子,说明f-string如何使用:

a = "hello"
b = "python"f"{a} {b}"
'hello python'

指定变量格式化

# 我们显示声明3个变量name = "Yule Cottage"  # 字符串类型
age = 25  # 整数类型
height = 1.76   # 浮点数类型
f'名字是:{name},年龄是:{age},身高是:{height}'  # 前面加上f
'名字是:Yule Cottage,年龄是:25,身高是:1.76'

我们和format进行一下对比:

"名字是:{},年龄是:{},身高是:{}".format(name,age,height)  # format函数在最后面
'名字是:Yule Cottage,年龄是:25,身高是:1.76'

指定表达式格式化

如果后面的string部分是表达式,也可以进行格式化

f'{1+2+3}'
'6'
f'{1*2*3*4}'
'24'

对表达式进行变量的赋值再格式化:

x = 100
y = 50f"{x*y + x/y}"  # 100*50 + 100 / 50 结果是浮点数
'5002.0'

指定函数格式化

上面的例子是直接赋值再通过表达式来格式化,我们其实可以将上面的表达式改成函数,传入参数来格式化,函数可以是:

  • python自带的函数

  • 自定义的函数

# 自带函数
print(f'my name is: {name}')  # 原数据
print(f'my name is: {name.upper()}')  # 全部变成大写字母
my name is: Yule Cottage
my name is: YULE COTTAGE
# 自己写个函数def test(a,b):return a * b + a / bf'{test(100,50)}'
'5002.0'
# 或者直接写成lambda 匿名函数f'执行的结果是:{(lambda x,y: x*y + x/y)(100,50)}'
'执行的结果是:5002.0'

对齐

  • <:靠左,字符串默认方式

  • >:靠右,数值类型默认方式

  • ^:居中

print(f'{name}')  # 字符串默认左
print(f'{name:>20.10s}')  # > 右对齐 长度20  字符串最大长度10
print(f'{name:<20.12s}')  # < 左对齐 长度20  字符串最大长度12
Yule CottageYule Cotta
Yule Cottage
pi = 3.1415926print(f'{pi}')  # 原数据
print(f'{pi:^10.4f}')  # 居中 长度为10  保留4位小数
print(f'{pi:>10.4f}')  # 靠右 长度为10  保留4位小数
print(f'{pi:<10.4f}')  # 靠左 长度为10  保留3位小数
3.14159263.1416  3.1416
3.1416

填充

print(f'{pi}')  # 原数据print(f'{pi:*^10.4f}')  # 填充*:居中 长度为10  保留4位小数
print(f'{pi:*>10.4f}')  # 填充*:靠右 长度为10  保留4位小数
print(f'{pi:*<10.4f}')  # 填充*:靠左 长度为10  保留3位小数
3.1415926
**3.1416**
****3.1416
3.1416****

千位分隔符

和format中的千位分隔符相同,主要是用于金融货币中,自带金钱属性呀。可以使用逗号或者其他符号,常用逗号:

money = 1234567890print(f'{money:,f}')  # 输出保留6位小数
1,234,567,890.000000
print(f'{money:_f}')   # 使用下滑线
1_234_567_890.000000

四、字符串模板string template

string.Template是将一个string设置为模板,通过替换变量的方法,最终得到想要的string

from string import Template  # 导入模板template_string = '$name is $sex's = Template('$name is $sex')
s.substitute(name="Peter",sex="male")
'Peter is male'
from string import Template  # 导入模板template_string = '$name is $sex'  # 1、设置模板
s = Template(template_string)  dic = {"name":"Peter","sex":"male"}s.substitute(dic)
'Peter is male'

在上面的例子中:

  • 模板s中有以$符号说明模板中有两个变量名,用实际的变量来替换。

  • 格式是dictionary,并且字典中的key值与模板中的变量名要保持一致

  • string.Template默认用$符号来标识出变量;可以进行修改

from string import Template
class MyTemplate(Template):     delimiter = '%'
...
s = MyTemplate('%who knows?')  # 改变符号
s.substitute(who='Peter')
'Peter knows?'

五、格式整理

整理下关于对齐、精度、数值类型的符号等知识点:

对齐

  1. <:右对齐(数值默认对齐方式)

  2. >:左对齐(字符串默认对齐方式)

  3. ^:居中

符号

  1. +:负数前加负号(-),正数前加正号(+)

  2. -:负数前加负号(-),正数前不加任何符号(默认)

  3. 空格:负数前加负号(-),正数前加一个空格

宽度和精度

  • width:指定宽度为width

  • width.precision:宽度为width,精度为precision

  • 0width:宽度为width,指定高位用0补足宽度

六、总结

1、%占位符

表达式比较直观,容易上手;但是当参数变多的时候,格式就变得繁琐,这种方式现在几乎淘汰

2、format函数

方法比较灵活,能够自己设置参数来对应相应的变量;参数变多的时候,表达式同样繁琐,整个式子会非常长

3、f-string

相对前两种方式会灵活些,也更直观。Python3.6开始出现,语句格式可能稍显复杂

重点还是要掌握format函数和f-string


往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑黄海广老师《机器学习课程》课件合集
本站qq群851320808,加入微信群请扫码:

【Python】55个案例:吃透Python字符串格式化相关推荐

  1. python 3.5 format_Python3 format及字符串格式化

    字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-310 ...

  2. Python基础入门:3种字符串格式化方法教程

    有时候我们需要把一些变量填写到一个字符串中,如我们有3个变量 name="张三" gender="男" age="21" 假如我需要把它们放 ...

  3. Python入门——Day4(元组,字符串格式化,转义字符,format函数)

    0.目录 1.元组-带上枷锁的列表 2.字符串格式化符号含义 3.格式化操作符辅助命令 4.转义字符及其含义 5.format函数 1.元组(tuple) 创建与访问元组 >>> t ...

  4. Python数据分析挖掘案例:Python爬虫助力疫情数据追踪

    通过学习Python数据分析挖掘案例,可以掌握通过Python爬虫获取的数据进行处理以及可视化分析的主要方法和技能,并为后续相关课程学习及将来从事数据分析工作奠定基础. 新冠病毒疫情在武汉突然爆发,确 ...

  5. 〖Python零基础入门篇⑳〗- 字符串格式化

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

  6. python项目开发案例精粹-Python金融实战案例精粹

    随着金融科技时代的到来,Python在金融领域的影响力已经有目共睹.掌握Python在金融实务中的应用,已经成为金融科技达人们必备的技能之一. 本书作为<基于Python的金融分析与风险管理&g ...

  7. python小项目案例-拯救Python新手的几个项目实战

    原标题:拯救Python新手的几个项目实战 Python 做小游戏 实例一:24点游戏 项目名称:经典趣味24点游戏程序设计(python) 实例二:五子棋游戏 python学习关注我们企鹅qun: ...

  8. Python应用实战案例-深入浅出Python随机森林预测实战(附源码)

    前言 组合算法也叫集成学习,在金融行业或非图像识别领域,效果有时甚至比深度学习还要好.能够理解基本原理并将代码用于实际的业务案例是本文的目标,本文将详细介绍如何利用Python实现集成学习中随机森林这 ...

  9. python应用实战案例:python如何实现异步爬虫?

    前言 爬虫程序与手机里安装的社交软件和娱乐软件不一样,但它们可能是互相关联的.你早上看到的新闻资讯以及股票走势图,都有可能是爬虫程序收集而来的.爬虫程序的核心是数据--它围绕着数据工作. 以下是我为大 ...

  10. python入门爬虫案例_[Python入门学习]-爬虫项目案例讲解

    一.速成HTML html:超文本标记语言. 文档的第一行就表明这是一个html文档.根标签是html,然后下面有head和body,head里面是一些头信息,body就是我们想把页面渲染成什么样. ...

最新文章

  1. editplus 配置 golang 开发调试环境
  2. 使用qsort对不连续的内存数据排序_数据结构教程_v20201121
  3. 【译】Secure Computations as Dataflow Programs Implementing the SPDZ Protocol using TensorFlow
  4. python用二维码共享文档_[源码和文档分享]基于Python的QR二维码的生成与识别程序...
  5. APP搜索框的样式素材模板,可临摹的好素材
  6. 第一章python绝对温标身体质量指数bmi
  7. 测视力距离5米还是3米_多功能视力表灯箱的用法
  8. 推荐系统实战第二部分 评价指标
  9. linux vim个人配色方案
  10. 系列篇|一文尽览事件相机原理
  11. Contest2609 - 高级语言程序实践--第8次作业--计信A2107-2113
  12. Windows7下安装sql2000个人版
  13. oracle rap,部署RAP服务器
  14. 利用计算机测地震是计算机的什么,地震监测计算机安装系统的制作方法
  15. 逆波兰式 java_逆波兰式(后缀表达式)的计算 中缀表达式转后缀表达式(逆波兰式)【java实现】...
  16. oracle 取流水号
  17. python字母对应数字上海迪士尼残疾人门票_所有景点提供无障碍设施 残障人士也能玩转上海迪士尼...
  18. 金融机构业务连续性管理
  19. java选择题《每日一练》
  20. Win10 下安装Win7双系统

热门文章

  1. C++ 类模板四(typename关键字)
  2. machine learning (2)-linear regression with one variable
  3. I2C总线以及GPIO模拟I2C
  4. IOS面试题--001
  5. [转]JS获取当前对象大小以及屏幕分辨率等
  6. hdu 4602 Partition
  7. sqli-lab(16)
  8. Codeforces - 1118D2 - Coffee and Coursework (Hard Version) - 二分
  9. vscode 初次安装使用指南
  10. iOS App版本号compare