Python字符串格式化方式


Posted in Python onApril 07, 2022

什么是格式化?

定义:一个固定字符串中有部分成员(元素)会根据变量的值的改变而改变的字符串,这就是字符串格式化。

举一个生活中的小栗子:比如我们的书包,我们的书包是固定变的。但是我们可能每天会往书包里放入我们每天需要携带的不同物品。这里的书包就好比 “固定的字符串” ,而每天书包里方的不同物品就好比是 “会根据变量的值的改变而改变的字符串”。

下面我们再结合代码示例更直观的理解什么是格式化字符串,示例如下:

# 今天是 Date ,星期 Week 
# 这里的 Date ,我们换成 '2000年1月1日' ; Week 我们换成 '一'

Date = '2000年1月1日'
Week = '一'

print('今天是 ' + str(Date) + ' 星期' + Week)
# Date 与 Week 两个变量会随着值的改变输出今天的日期与星期几; 这个就是字符串的格式化。

使用格式化的场景和目的

  • 发送邮件的时候
  • 发送短信的时候
  • APP推送新闻消息的时候
  • 对于重复性很多的信息,通过格式化的方式我们可以大大减少代码的书写量

我们思考一下上面的这些场景,当我们处于上述场景的时候。可能接收的邮件、短信、新闻等信息的内容是一样的。但是它发送给很多不同的人,这里的我们只需要编辑一个统一的内容模板,然后进行格式化操作,只需要将接收人进行格式化的操作,就可以让不同的人接收到同样的内容。

格式化的三种方式

根据类型定义的格式化 - %s

字符串格式化使用操作符 % 来实现, 示例 'my name is %s,my age is %s % ('neo', 18)'

格式符: %s

连接符:格式化字符串与格式符变量之间用一个 % 连接, % 两边各有一个空格

附:当我们字符串中只有一个变量时,不需要使用元组进行包裹;超过一个时,就需要使用元组进行包裹。

示例如下:

info_01 = 'My name is %s , age is %s ' % ('Neo', 19)
print(info_01)

# >>> My name is Neo , age is 19

info_02 = 'My name is %s , age is %s '

name_01 = 'Neo'
age_01 = 18
name_02 = 'Jack'
age_02 = 17

print(info_02 % (name_01, age_01))
print(info_02 % (name_02, age_02))

# >>> My name is Neo , age is 18
# >>> My name is Jack , age is 17

关于整数的输出

  • %o:oct 八进制
  • %d:dec 十进制
  • %x:hex 十六进制
print("整数:%d,%d,%d" % (1, 2.2, 345))
print("整数不足5位,左边补空格   %5d   " % 11)
print("整数不足5位,左边补0     %05d   " % 11)
print("整数不足5位,右边补空格  %-5d   " % 11, "end")
print("八进制 %o" % 222)
print("十六进制 %x" % 12)

 执行结果如下:

>>> 整数:1,2,345
>>> 整数不足5位,左边补空格    11 
 >>> 整数不足5位,左边补0 00011 
 >>> 整数不足5位,右边补空格 11     end
>>> 八进制 336
>>> 十六进制 c

包含知识点:

  • 当你有多个参数需要格式化输出的时候,需要用元组 (1,2,3) ;注意不能用列表因为列表是可变的
  • 若传入的是浮点数如 2.2 ,最后输出的是2,只会取整不会四舍五入
  • 若传入了字符串 ‘2.2’ ,是会报错滴!

关于浮点数的输出

print("浮点数:%f,%f " % (1, 22.22))
print("浮点数保留两位小数:%.2f  " % 22.222)
print("浮点数保留两位小数,宽5位,不足补0:%05.5f " % 2.222)

执行结果如下:

# >>> 浮点数:1.000000,22.220000 
# >>> 浮点数保留两位小数:22.22  
# >>> 浮点数保留两位小数,宽5位,不足补0:02.22  

包含知识点:

  • 默认保留6位小数,可通过 .2f 这种形式指定小数位,2代表保留两位

关于字符串的输出

print("字符串:%s,%s,%s" % (1, 22.22, [1, 2]))
print("字符串不足5位,左边补空格   %5s   " % '2')
print("字符串不足5位,右边补空格   %-5s   " % '2', "end")
print("字符串宽10位,截取两位      %10.2s " % "hello.world")

# 执行结果如下:
# >>> 字符串:1,22.22,[1, 2]
# >>> 字符串不足5位,左边补空格       2   
# >>> 字符串不足5位,右边补空格   2        end
# >>> 字符串宽10位,截取两位              he 

包含知识点:

  • 可以传入任意类型的数据,譬如整数、浮点数、列表、元组甚至字典,他都会自动转成字符串类型

字符串格式化函数 - format()

format() 函数格式化字符串是目前最常用的一种格式化方式

  • string.format() 函数也可以用来格式化字符串
  • 使用 format() 函数的字符主体使用 {} 大括号来替代格式符
  • 用法是 string.format(data, data, data…)
  • 不带编号,即 {}
  • 带数字编号,可调换顺序,即 {1} 、 {2}
  • 带关键字,即{a} 、 {b}

示例如下:

print("今天是{},{}的{}岁生日会".format("2020年1月1日", "Neo", 18))

print("今天是{0},{1}的{2}生日会".format("2020年1月1日", "Neo", 18))

print("今天是{today},{name}的{age}生日会".format(today="2020年1月1日", name="Neo", age=18, hight="175"))

print("今天是{name}的{key}生日会,他在尝试{}".format("喝酒", name="Neo", key=18))

# 以下会报错
#print("今天是{0}的{}生日会".format("Neo", 18))
#print("今天是{name}的{key}生日会,他在尝试{}".format( name="Neo", key=18,"喝酒"))

#执行结构如下:
# >>> 今天是2020年1月1日,Neo的18岁生日会
# >>> 今天是2020年1月1日,Neo的18生日会
# >>> 今天是2020年1月1日,Neo的18生日会
# >>> 今天是Neo的18生日会,他在尝试喝酒

需要注意:

  • 当你只写了 {} 时,默认按传入的值的顺序读取
  • 当你写了数字编号 {1} ,则可以读取对应位置上的值,从0开始
  • 当你指定了关键字 {name} ,如果不指定 name=xxx ,则会报错
  • 当你指定了关键字,又只写了 {} 时,你传入带有关键字指定的值必须写在后面,类似函数(形参在前,实参在后)
  • {} 和 {1} 是不能共存的

关于format()函数总结

当用到format时,一个字符串里面的格式化输出只用一种方式,不要混合使用,容易出问题且没有必要

format()函数 - 指定数据类型输出

print("整数{:d}".format(123))
print("浮点数{:5.2f}".format(123.19))
print("字符串{:s}".format('123'))
print("八进制{:o}".format(12))
print("十六进制{:x}".format(13))

# 执行结果如下
# >>> 整数123
# >>> 浮点数123.19
# >>> 字符串123
# >>> 八进制14
# >>> 十六进制d

知识点

  • 指定了 :s ,则只能传字符串值,如果传其他类型值不会自动转换
  • 当你不指定类型时,你传任何类型都能成功,如无特殊必要,可以不用指定类型
  • 如果要结合数字编号和关键字使用可以如下
print("关键字 {num:d}".format(num=123))
print("数字编号 {0:d},{1:s}".format(123, "123"))

# 执行结果如下
# >>> 关键字 123
# >>> 数字编号 123,123

format()函数 - 位数补齐

print('默认左对齐,宽度为10,不足补空格:{:10}'.format("123"), "end")

print('左对齐,宽度为10,不足补空格:{:<10}'.format("123"), "end")

print('右对齐,宽度为10,不足补空格:{}{:>10}'.format("start", "123"))print('右对齐,宽度为10,取两位小数,不足补0:{:0>10.2f}'.format(22.22555))

# 执行结果如下:
# >>> 默认左对齐,宽度为10,不足补空格:       123 end
# >>> 左对齐,宽度为10,不足补空格:123        end
# >>> 右对齐,宽度为10,不足补空格:start       123
# >>> 右对齐,宽度为10,取两位小数,不足补0:0000022.23

知识点

  • 默认左对齐可以不用就加 <
  • 当你不指定数据类型时,传什么类型的值都能成功格式化输出

format()函数 - 拓展

print("总是显示符号:{:0>+8.2f},{:0>+8.2f}".format(3.14, -3.14))

print("百分数:{:%} {:.2%}".format(3 / 7, 3 / 7))

print("逗号分隔,一般用在金钱 {:,}".format(12345678)
      
# 执行结果如下:
# >>> 总是显示符号:000+3.14,000-3.14
# >>> 百分数:42.857143% 42.86%
# >>> 逗号分隔,一般用在金钱 12,345,678

知识dian

  • + 的意义在于,当我们输出的是正数也能看到符号
  • 百分数是真的百分数,不是单单加个 % ;譬如 0.25667 ,变成百分数就是 25.67%
  • , 固定隔三位数字;传入字符串会报错

新格式化方法 :f-strings

  • 首先需要先定义一个变量
  • 在字符串主体前加一个 f 符号
  • 在需要格式化的位置使用 {变量名}

示例如下:

name = "Neo"
age = 18
message = f"Hello,{name}"
print(message + "!")

info = f"my name is {name}, and age is {age}"
print(info + ".")

# 执行结果如下:
# >>> Hello,Neo!
# >>> my name is Neo, and age is 18.

到此这篇关于Python字符串格式化方式的文章就介绍到这了,更多相关Python字符串格式化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python多线程编程(三):threading.Thread类的重要函数和方法
Apr 05 Python
Python的ORM框架中SQLAlchemy库的查询操作的教程
Apr 25 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
Nov 30 Python
python3.6的venv模块使用详解
Aug 01 Python
对python模块中多个类的用法详解
Jan 10 Python
Python实现爬取马云的微博功能示例
Feb 16 Python
pyenv与virtualenv安装实现python多版本多项目管理
Aug 17 Python
python3.6生成器yield用法实例分析
Aug 23 Python
pytorch实现mnist数据集的图像可视化及保存
Jan 14 Python
django模型动态修改参数,增加 filter 字段的方式
Mar 16 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
GitHub上值得推荐的8个python 项目
Oct 30 Python
Python中re模块的元字符使用小结
Python基本知识点总结
Apr 07 #Python
Django + Taro 前后端分离项目实现企业微信登录功能
Apr 07 #Python
Python OpenCV实现图像模板匹配详解
Python实现日志实时监测的示例详解
Python使用PyYAML库读写yaml文件的方法
Apr 06 #Python
python+pytest接口自动化之token关联登录的实现
You might like
php download.php实现代码 跳转到下载文件(response.redirect)
2009/08/26 PHP
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
用JS在浏览器中创建下载文件
2014/03/05 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
vue微信分享的实现(在当前页面分享其他页面)
2019/04/16 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
vue输入节流,避免实时请求接口的实例代码
2019/10/30 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
如何基于jQuery实现五角星评分
2020/09/02 jQuery
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
Python threading多线程编程实例
2014/09/18 Python
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
pytorch 输出中间层特征的实例
2019/08/17 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
Python虚拟环境库virtualenvwrapper安装及使用
2020/06/17 Python
手摸手教你用canvas实现给图片添加平铺水印的实现
2019/08/20 HTML / CSS
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
质量工程师岗位职责
2013/11/16 职场文书
自荐信格式技巧有哪些呢
2013/11/19 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
党校学习党性分析材料
2014/12/19 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书
Python jiaba库的使用详解
2021/11/23 Python
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers