专栏首页Python小屋Python 3.6.x字符串格式化方法小结

Python 3.6.x字符串格式化方法小结

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小屋(Python_xiaowu),作者:董付国

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-08-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python文本处理2个小案例(文本嗅探与关键词占比统计)

    问题描述:有一些句子和一些关键词,现在想找出包含至少一个关键词的那些句子(文本嗅探),可以参考print('='*30)之前的代码。如果想进一步计算每个句子中的...

    Python小屋屋主
  • Python运算符is与==的区别

    在Python中,关系运算符==用来测试两个对象的值是否相等,而同一性测试运算符is用来测试两个对象是否是同一个对象,如果两个变量是同一个对象,那么它们的内存地...

    Python小屋屋主
  • 使用Python字符串的编码与解码方法实现信息加解密

    代码思路很简单,字符串的encode()方法可以将其编码为字节串,在生成的字节串中插入干扰字节后无法正常解码,要想还原信息,必须清楚干扰字节的位置并删除后再使用...

    Python小屋屋主
  • 面试题40(关于运算符的优先级以及字符串的拼接的理解)

    下面这三条语句? ---- System.out.println(“is ”+ 100 + 5); System.out.println(100 + 5 +“...

    Java学习
  • PHP数组is_*()对比和解析

    如is_null,is_object,is_array,is_string,is_resource,is_bool,is_long,is_float 今天补充一...

    php007
  • Python--format()学习记录

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

    明天依旧可好
  • 变量类型测试函数的使用:八、剩余函数的使用方法

    讲完PHP变量类型测试函数【is_resource】的用法,今天来讲讲PHP变量类型测试函数【is_null、is_scalar、is_numeric、is_c...

    大脸猫
  • SAP S/4HANA系统Fiori UI上Adapt UI按钮显示与否的控制逻辑

    I use the same user to log on the same system, however some times the Adapt UI b...

    Jerry Wang
  • ffplay源码分析3-代码框架

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10301831.html

    用户4940323
  • 零基础读懂视频播放器控制原理: ffplay 播放器源代码分析

    本文对ffplay源码进行分析,试图用更基础而系统的方法,来尝试解开播放器的音视频同步,以及播放/暂停、快进/后退的控制原理。

    张坤

扫码关注云+社区

领取腾讯云代金券