◎知识点
格式化字符串之使用百分号作为占位符
格式化字符串之使用花括号作为占位符
格式化字符串之使用美元符作为占位符
◎脚本练习
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ @FileName: string_format.py @Function: string format @Author: Zhihe An @Site: https://chegva.com @Time: 2021/6/24 """ """一、格式化字符串之使用百分号作为占位符""" """ 1、什么是格式化字符串? 格式化字符串就是按一定格式输出的字符串 例如:字符串'2018-18-18 18:18:18'就是一个格式化字符串,它的格式为:'年-月-日 时:分:秒' 再例如:经过计算得到一个结果,想用一个有格式的字符串进行输出,格式为:'计算结果是:xxx' 如果想得到格式化字符串,常见的方式有三种: (1) 使用百分号作为占位符 (2) 使用花括号作为占位符 (3) 使用美元符作为占位符 顾名思义,占位符就是先占住一个位置的符号。在定义格式化字符串时,可以使用占位符先占住 某些固定位置,等访问字符串的时候,再将所有的占位符替换成实际值。例如,可以定义这样的格式化字符串: '%Y-%m-%d %H:%M:%S',其中,%Y、%m、%d、%H、%M和%S都是占位符,分别代表年、月、日、时、分、秒, 在访问字符串的时候,如果给出的实际值分别是2018、08、18、18、18和18,那么得到的格式化字符串就是 '2018-08-18 18:18:18',如果给出的实际值分别是2019、09、19、19、19和19,那么得到的 格式化字符串就是'2019-09-19 19:19:19' """ from datetime import datetime # 2018-08-18 18-18-18 print(datetime(2018, 8, 18, 18, 18, 18).strftime('%Y-%m-%d %H-%M-%S')) # 2019-09-19 19-19-19 print(datetime(2019, 9, 19, 19, 19, 19).strftime('%Y-%m-%d %H-%M-%S')) """ 2、格式化字符串之使用百分号作为占位符 常见的表示不同数据类型的占位符有: %s:表示字符串 %i或%d:表示整数 %f:表示浮点数 """ book = '《数据结构与算法》' s = '买了一本书:%s' % book print(s) # 买了一本书:《数据结构与算法》 """ 当定义的格式化字符串中包含两个及两个以上的占位符时,必须将所有的实际值封装在元组中 """ price = 68.88 s = '花了%f,买了一本书:%s' % (price, book) print(s) # 花了68.880000,买了一本书:《数据结构与算法》 """ 如果定义的格式化字符串中的%是一个普通字符,需要使用%%对其进行转义 """ # print('我的工作已经完成了%d%' % 80) # ValueError: incomplete format print('我的工作已经完成了%d%%' % 80) # 我的工作已经完成了80% """ 占位符%中可以指定宽度,数字和字符串都是右对齐 """ print('%10d' % 58) # 58 print('%10s' % '58') # 58 """ 占位符%中可以指定精度 """ print('%.3f' % 3.1415926) # 3.142 print('%.5s' % 'HelloWorld') # Hello # 同时指定宽度和精度 print('%8.3f' % 3.1415926) # 3.142 """二、格式化字符串之使用花括号作为占位符""" """ 1、可以调用方法format并使用花括号作为占位符,从而得到格式化字符串 """ book = '《数据结构与算法》' s = '买了一本书:{}'.format(book) print(s) # 买了一本书:《数据结构与算法》 """ 如果占位符{}中不指定参数,方法format的参数会按顺序依次匹配所有的占位符{} """ price = 68.88 s = '花了{},买了一本书:{}'.format(price, book) print(s) # 花了68.88,买了一本书:《数据结构与算法》 """ 2、占位符{}中可以指定位置参数,0表示方法format的第1个参数,1表示方法format的第2个参数,...依此类推 """ s = '花了{0},买了一本书:{1},只花了{0}!'.format(price, book) print(s) # 花了68.88,买了一本书:《数据结构与算法》,只花了68.88! """ 3、可以在方法format中指定关键字参数的名称和值,在占位符{}中指定关键字参数的名称 """ s = '花了{p},买了一本书:{b},只花了{p}!'.format(p = price, b = book) print(s) # 花了68.88,买了一本书:《数据结构与算法》,只花了68.88! """ 4、占位符{}中可以使用冒号指定整数的表示形式。其中,位置参数或关键字参数的名称放在冒号前面 """ # 十进制 print('{:d}'.format(58)) # 58 # 二进制 print('{:b}'.format(58)) # 111010 # 十六进制(a~f是小写) print('{:x}'.format(58)) # 3a # 十六进制(A~F是大写) print('{:X}'.format(58)) # 3A # 浮点数 print('{:f}'.format(58)) # 58.000000 # 使用逗号作为千位分隔符 print('{:,}'.format(12345678)) # 12,345,678 print('{0:b}'.format(58)) # 111010 print('{num:b}'.format(num = 58)) # 111010 """ 占用符{}中还可以使用冒号指定宽度。其中,数字是右对齐,字符串是左对齐 """ print('{:10}'.format(58)) # 58 print('{:10}'.format('58')) # 58 print('{0:10}'.format(58)) # 58 print('{num:10}'.format(num = 58)) # 58 """ 占位符{}中还可以使用冒号指定精度 """ # 总共3位 print('{:.3}'.format((3.1415926))) # 3.14 # 小数点后面3位 print('{:.3f}'.format((3.1415926))) # 3.14 print('{:.5}'.format('HelloWorld')) # Hello print('{0:.3}'.format((3.1415926))) # 3.14 print('{num:.3}'.format(num = 3.1415926)) # 3.14 # 同时指定宽度和精度 print('{:8.3f}'.format(3.1415926)) # 3.142 """ 5、占位符{}中还可以使用冒号指定其它格式 """ from datetime import datetime # 2018-08-18 18:18:18 print('{:%Y-%m-%d %H:%M:%S}'.format(datetime(2018, 8, 18, 18, 18, 18))) """ 还可以调用内置函数format得到格式化字符串,它与字符串的方法format是等价的: '{:m}'.format(n)等价于:format(n, 'm') """ print('{:b}'.format(58)) # 111010 print(format(58, 'b')) # 111010 print('{:8.3f}'.format(3.1415926)) # 3.142 print(format(3.1415926, '8.3f')) # 3.142 """三、格式化字符串之使用美元符作为占位符""" """ 可以导入模块string中的类Template并使用美元符作为占位符,从而得到格式化字符串 """ from string import Template price = 68.88 book = '《数据结构与算法》' tmpl = Template('花了$p,买了一本书:$b') """ 1、调用方法substitute """ s = tmpl.substitute(p = price, b = book) print(s) # 花了68.88,买了一本书:《数据结构与算法》 s = tmpl.substitute({'p': price, 'b': book}) print(s) # 花了68.88,买了一本书:《数据结构与算法》 """ 当占位符没有匹配的实际值时,抛出KeyError """ # tmpl.substitute(p = price) # KeyError: 'b' """ 2、调用方法safe_substitute 由方法名可知,safe_substitute比substitute更安全,当占位符没有匹配的实际值时, 并不会抛出KeyError,而是使用占位符本身作为其实际值 """ s = tmpl.safe_substitute(p = price) print(s) # 花了68.88,买了一本书:$b
▽ 占位符示意图