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自动化测试工具Splinter简介和使用实例
May 13 Python
python通过BF算法实现关键词匹配的方法
Mar 13 Python
在Python中使用Neo4j数据库的教程
Apr 16 Python
使用py2exe在Windows下将Python程序转为exe文件
Mar 04 Python
Python部署web开发程序的几种方法
May 05 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
Feb 10 Python
实例讲解Python中浮点型的基本内容
Feb 11 Python
Python Sphinx使用实例及问题解决
Jan 17 Python
Python chardet库识别编码原理解析
Feb 18 Python
pandas数据处理之绘图的实现
Jun 15 Python
Python特殊属性property原理及使用方法解析
Oct 09 Python
Python实现我的世界小游戏源代码
Mar 02 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 设计模式之观察者模式介绍
2012/02/22 PHP
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
yii添删改查实例
2015/11/16 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
jquery中.add()的使用分析
2013/04/26 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
jQuery轻松实现无缝轮播效果
2017/03/22 jQuery
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
浅析Angular19 自定义表单控件
2018/01/31 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
2018/11/22 Javascript
layui添加动态菜单与选项卡
2019/07/26 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
2020/03/17 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
JavaScript实现拖动对话框效果的实现代码
2020/10/12 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
Python 使用SMTP发送邮件的代码小结
2016/09/21 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
英国DIY和家居装饰领域的主要品牌:Wickes
2019/11/26 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
机关门卫的岗位职责
2014/04/29 职场文书
员工生日活动方案
2014/08/24 职场文书
普宁寺导游词
2015/02/04 职场文书
公司禁烟通知
2015/04/23 职场文书
2016新春团拜会致辞
2015/08/01 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL
使用CSS实现一个搜索引擎的原理解析
2021/09/25 HTML / CSS