文章目录
如果字符串有一部分是固定的,少部分需要动态改变,就把固定的额部分做成模板,动态的部分预留出位置,然后往里传参数替换。
几种方法都是占位置的方法和替换的方法的区别。
1、%占位符
使用字符串格式化操作符 % 替换,需要指定数据类型,字符串用%s,整数用%d,%.f 表示保留小数位,多个被替换的按顺序提供,使用元祖。经常用!
FormatStr = 'hello %s. Today is %s'
value = ('Mike', 'Wednesday')
print(FormatStr % value)
# hello Mike. Today is Wednesday
对于字符串有%s,浮点型或者整数还有其他格式:
- %d 与 %.f
FormatStr='圆周率是 %.4f,保留小数点后 %d 位'
value=(pi,4)
print(pi,FormatStr % value)
# 3.141592653589793 圆周率是 3.1416,保留小数点后 4 位
- 如果同时用到百分号和占位符,需要用两个%
FormatStr='成功率是10%%,如果%s首发成功率是%d%%'
value=('Mike',50)
print(FormatStr % value)
# 成功率是10%,如果Mike首发成功率是50%
2、string中的Template的subtitute方法
- 通过Template类实例化出来一个模板字符串,$+变量名作为占位符,调用substitute方法,用关键字传参或者字典形式传参。不常用。
from string import Template
s1=Template('今天是$day,$name去上学了')
print(s1.substitute(day='Wednesday',name='Mike'))
# 今天是Wednesday,Mike去上学了
s2 = Template('今天是$day,$name去上学了')
dic = {'day': 'Wednesday', 'name': 'Mike'}
print(s2.substitute(dic))
# 今天是Wednesday,Mike去上学了
- 用到$表示美元符号时,用两个$$
s1=Template('$num1$$ 能换$num2人民币')
dic={'num1':1,'num2':6.70}
print(s1.substitute(dic))
# 1$ 能换6.7人民币
3、format方法
经常用,比占位符%和$功能要强大。用一对大括号 { } 表示要格式化参数。
format方法主要注意三部分:{指定字段:转换标志+设置格式}
3.1 指定字段
- 可以按顺序传参,不需要指定数据类型,可以传入支持的任何值!
s1='{} {} {}是好朋友'
print(s1.format('小明','小红','小强'))
# 小明 小红 小强是好朋友
- 可以按关键字传参,关键字传参不用按照顺序
print('{a} {b} {c}'.format(a=1,c=2,b=3))
# 1 3 2
- 可以按索引取参,可以混合关键字传参一起用
print('{0}成{s}于{1}{2}'.format('中国','1949年','10月1日',s='立'))
# 中国成立于1949年10月1日
- 可以用列表。不常用。
NameList=['小明','小强']
s='其他两个人是{name[0]},{name[1]}'
print(s.format(name=NameList))
# 其他两个人是小明,小强
3.2 转换标志
结合格式化类型符
a | Unicode形式输出 |
b | 整数转二进制输出 |
f | 浮点数,默认是6位 |
o | 八进制 |
x | 十六进制 |
e | 科学记数法 |
% | 百分比格式 |
大部分都用冒号,少量用!
print('Unicode编码显示:{s!a}'.format(s='你'))
# Unicode编码显示:'\u4f60'
print('二进制:{n:b}'.format(n=3))
# 二进制:11
print('科学记数法:{n2:e}'.format(n2=100))
# 科学记数法:1.000000e+02
print('百分比:{:%}'.format(0.05))
# 百分比:5.000000%
print('默认6位:{n:f}'.format(n=0.5))
# 默认6位:0.500000
当然转换进制更简单的写法:
# 将其他进制的字符串类型转成十进制
print(int('111',2)) # 将二进制数(字符串类型)转换成十进制
# 7
print(int('189',16)) # 将16进制转换成十进制
# 393
print(int('171',8))
# 121
# 将十进制转换成其他进制
print(bin(3)) # 转二进制
# 0b11
print(hex(11)) # 转十六进制
# 0xb
print(oct(11)) # 转八进制
# 0o13
3.3设置格式
3.3.1 附数字的format格式方法
数字字符串format方法,直接对数字设置样式,格式:format(数字,字符串形式的样式),加一句:浮点数默认是6位。
print(format(0.05,'0.3f'))
# 0.050 设置小数点后位数
print(format(0.05,'0.2%'))
# 5.00%
print(format(123456,','))
# 123,456 千分位逗号分隔
print(format(0.123,'>10.2f'))
# 10个字符长度内,右对齐,保留2位
print(format(0.12345,'0>10.2f'))
# 0000000.12 右对齐>补0,左对齐是<
print(format(0.12345,'@^10.4f'))
# @@0.1235@@ 中心对齐,补@
print(format(0.12345,'e'))
# 1.234500e-01
print(format(0.12345,'0.2e'))
# 1.23e-01
3.3.2字符串的format用法
格式为:
‘{:样式}’.format(值)
- 对字符串里的数字来说设置宽度,默认右对齐,字符串是左对齐
print('距离{:5}还有{:5}天'.format('高考',10))
# 距离高考 还有 10天
- 设置宽度,.f,字符串截取字符,数字表示非0整数位和小数位的总位数,或者整数位为0时,小数位的位数。
print('截取字符:{:.2}'.format('你好小朋友'))
# 截取字符:你好
print('设置数字位数:{:.2}'.format(1.12345))
# 设置数字位数:1.1
print('设置数字位数:{:.2}'.format(0.12345))
# 设置数字位数:0.12
t=format(1.12345,'0.2f')
print(type(t),t)
# <class 'str'> 1.12
t2 = '{:.2}'.format(1.12345)
print(type(t2), t2)
# <class 'str'> 1.1
t3 = '{:.2f}'.format(1.12345)
print(type(t3), t3)
# <class 'str'> 1.12
- 左右中心对齐,不够位数补足,表示方法与数字格式化一致
print('{:!^10}'.format('你好'))
# !!!!你好!!!!
print('{:!<10}'.format('你好'))
# 你好!!!!!!!!
print('{:!>10}'.format('你好'))
# !!!!!!!!你好
print('{:!^9}'.format('你好'))
# !!!你好!!!!
- 在负号- 与数字之间填充,可以用 = 表示。
print('{:!=10.2f}'.format(-1.123))
# -!!!!!1.12 在符号-和数字之间填充,共10位
- 大括号之内还可以再嵌套
s1=input('输入要填充的符号')
print('{:{s}^10.2f}'.format(1.12345,s=s1))
# @@@1.12@@@