Python格式化字符串方法——以%占位操作符为例

2023-02-06 12:48:48
#Python格式化字符串方法——以%占位操作符为例

'''
在python的使用过程中,有时需要将输出的字符串做统一规定,因此需要提前编写一个字符串的模板。
模板中有格式符,这些格式符为最后输的字符串预先占据位置,
并规定其应该呈现的格式,包括字符的位置、对齐方式、空位补充方式等。
Python中内置的%操作符可用于格式化字符串操作,控制字符串的呈现格式。
Python中还有其他的格式化字符串的方式,但%操作符的使用是最方便的。

%格式符的语法:%[(name)][flags][width].[precision]typecode。

(name)参数:当使用字典作为真实值的存放容器,name在此对应输出值关联的字典的键名,必须使用小括号将键名括起来,
如果字典中不存在该键,则引发异常,否则输出该键对应的值;
flags可以有+,-,' '或0。
+表示应该包含数字的正负号。-表示左对齐,没有则表示右对齐。
' '为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0表示使用0填充;
width表示该输出值占用的宽度;
precision表示小数点后精度;
typecode表示输出值的类型,

具体含义如下:
%s             字符串 (采用str()的显示)
%r             字符串 (采用repr()的显示) #repr() 函数将对象转化为供解释器读取的形式,输出的字符加引号。
%c             单个字符
%b             二进制整数
%d,%i          十进制整数
%o             八进制整数
%x,%X          十六进制整数
%e,%E          指数 (基底写为e,E)
%f,%F          浮点数
%g,%G          指数或浮点数 (根据显示长度)
%u             无符号数(没有细查文档,经测试可以输出负数)
%%             字符"%"
'''


# 例1:
#%格式符的语法:%[(name)][flags][width].[precision]typecode。
example_1 = "I'm %s, I'm %d years old." % ('wrh', 29)
print(example_1)
'''
输出结果:
I'm wrh, I'm 29 years old.
'''

#例2:
#%格式符的语法:%[(name)][flags][width].[precision]typecode。
example_2 = ("I'm %(name)s, I'm %(age)d years old." % {'name':'wrh', 'age':29})
print(example_2)
'''
输出结果:
I'm wrh, I'm 29 years old.
'''

#例3:
#%格式符的语法:%[(name)][flags][width].[precision]typecode。
print("%+10x" % 10) #+表示应该包含数字的正负号,10表示宽度,表示十六进制(10的十六进制是a)
print("%04d" % 5) #0表示用0填充,4表示宽度,d表示十进制整数
print("%6.3f" % 2.3) #6表示宽度,3表示精确到小数点后三位,f表示浮点数
print("%.*f" % (4, 1.2))  #width, precision为两个整数。我们可以利用*,来动态代入这两个量。4表示精确到小数点后四位。
print("%*.f" % (4, 1.2)) #width, precision为两个整数。我们可以利用*,来动态代入这两个量。4表示宽度为4。
'''
输出结果:
        +a
0005
 2.300
1.2000
   1
'''

#例4
#%格式符的语法:%[(name)][flags][width].[precision]typecode。
a = '30c'
F = 1.8*float(a[0:-1]) + 32
print("%.1fF" % F) #精确到小数点后1位,浮点数,第一个F为固定字符,第二个F是所要格式化的字符变量。

'''
输出结果:
86.0F
'''

#练习题:

#假设:学生信息存放在一个字典数据中,格式如下:
student={'name':'小明','class':20190301,'score':597.5}
#1.输出学生姓名,右对齐,直接使用真实值
#%格式符的语法:%[(name)][flags][width].[precision]typecode。
print('%s同学' % student['name'])
#2.左对齐,名字占用4个长度,班级10个长度,分数7个长度的浮点数,真实值使用元组存储
print('%10s班 %-4s同学,总分:%7.2f' % (student['class'],student['name'],student['score']))
#3.#右对齐其他格式与上例同,只是格式化字符串和真实值存放在变量中,输出时格式化处理
format='%10s班 %-4s同学,总分:%7.2f'
value=(student['class'],student['name'],student['score'])
print(format % value)
#4.右对齐其他格式与上例同,只是格式化字符串和真实值存放在变量中,将格式化处理结果存放到变量再输出
format='%10s班 %-4s同学,总分:%7.2f'
value=(student['class'],student['name'],student['score'])
output=format % value
print(output)
#5.使用字典存放真实值,直接格式化输出
print('%(class)10s班 %(name)-4s同学,总分:%(score)7.2f' % student)
#6.使字典存放真实值,用变量方式存放格式化字符串
format='%(class)10s班 %(name)-4s同学,总分:%(score)7.2f'
output= format % student
print(output)

'''
输出结果:
  小明同学
  20190301班 小明  同学,总分: 597.50
  20190301班 小明  同学,总分: 597.50
  20190301班 小明  同学,总分: 597.50
  20190301班 小明  同学,总分: 597.50
  20190301班 小明  同学,总分: 597.50

'''
  • 作者:qianlixiushi
  • 原文链接:https://blog.csdn.net/qianlixiushi/article/details/106427144
    更新时间:2023-02-06 12:48:48