NO.2 格式化处理
一、%运算符
1.语法
格式:格式模板 % 值组
值组:两个及以上时需要用小括号括起来,中间用逗号隔开
格式模板:
%[(name)] [flags] [width].[precision]typecode
下面是各参数的意义:
1.1 typecode:必选参数,和C语言类似
值 | 说明 |
---|---|
s | 格式化为字符串 |
d | 格式化十进制整数 |
f | 格式化浮点型数 |
c | 格式化整数 |
o | 格式化八进制整数 |
x | 格式化十六进制整数 |
e/E | 格式化科学技术法 |
print("%s"%20.53)
print("%d"%20.53)
print("%f"%20.53)#浮点型输出默认是六位
print("%e"%3.1415926)
结果:
20.53
20
20.530000
3.141593e+00
1.2 name:可选参数,较少使用,主要是方便进行特定工作。
作用是输出字典对应键的值。
print("%(name)s,%(price)d"%{'name':'dog','price':200})
print("%(name)s,%(price)d"%{'price':200,'name':'dog'})
结果:
dog,200
dog,200
#顺序不需要一一对应
1.3 flags:可选参数
值 | 说明 |
---|---|
+ | 右对齐,正数前加正号,负数前加负号 |
- | 左对齐,正数前无符号,负数前加负号 |
空格 | 右对齐,正数前加空格,负数前加负号 |
0 | 正数前无符号,负数前加负号,用0填充空白处 |
1.4 width:可选,代表占位宽度
1.5 .precision:可选参数,设置浮点数或字符串的精度
print('%+6d'%1)
print('%+6d'%-1)
print('%-6d'%-1)
print('%06d'%1)
print('%.2f'%3.1415926)
print('%.2s'%'abcdefg')
结果:
+1
-1
-1
000001
3.14
ab
二、format()函数(非str.format())
1.语法
format(value,format_spec)
format_spec是格式化解释
当format_spec为空时,format相当于str(value),返回一个字符串
format_spec的编写方式:
太复杂不想写了,直接举例
print(format('python','10'))#字符串默认左对齐
print(format(2,'10'))#数字默认右对齐
print(format(2,'0<10'))#左对齐,不足部分0填充
print(format(2,'*>10'))#右对齐,不足部分*填充
print(format(2,'@^10'))#居中,不足部分@填充
print(format(-81.23,'0=10'))#数字填充,负号后面不足部分用0号填充
print(format(12.2,'f'))#转换为浮点型,小数默认6位
print(format(12,'o'))#转换为八进制
结果:
python
2
2000000000
*********2
@@@@2@@@@@
-000081.23
12.200000
14
2.常用
生成数据编号
生成日期编号
格式化value
进制转换
格式化日期和时间
符号 | 说明 |
---|---|
%y | 两位数的年份表示(00~99) |
%Y | 四位数的年份表示(000~9999) |
%m | 月份(01~12) |
%d | 月内中的一天(0~31) |
%H | 24小时制小时数(0~23) |
%I | 12小时制小时数(01~12) |
%M | 分钟数(00~59) |
%S | 秒(00~59) |
%a | 本地简化星期名称 |
%A | 本地完整星期名称 |
%b | 本地简化的月份名称 |
%B | 本地完整的月份名称 |
%c | 本地相应的日期表示和时间表示 |
%w | 星期(0~6),星期天为星期的开始 |
%W | 一年中的星期数(00~53)星期一为星期的开始 |
%Z | 当前时区的名称 |
import datetime
now = datetime.datetime.now()
print(format(now,'%Y-%m-%d %H-%M-%S'))
print(format(now,'%c'))
结果:
2021-05-29 20-51-22
Sat May 29 20:51:22 2021
三、str.format()方法
format方法可以对字符串进行格式化操作
1.语法
{参数序号:格式控制标记}.format(*args,**kwargs)
参数序号:位置参数或关键字参数传递过来的参数变量
格式控制标记:和前面format()函数的format_spec参数一样,标记参数显示的格式
*args:位置参数,是元组 ,可以为多个值,和参数序号位置一一对应,数量上一致
**kwargs:关键字参数,是字典,通过序号和参数序号进行对应,可以一对多,数量任意
2.1 索引序号和参数映射
2.1.1 通过位置参数映射
print('{}*{}'.format(1,2))#通过位置映射
print('{}*{}'.format(2,1))
print('{0}:{1}:{2}'.format('Q','W','E'))#通过索引序号
print('{1}:{0}:{1}'.format('Q','W','E'))
结果:
1*2
2*1
Q:W:E
W:Q:W
位置参数的值的可以是字符串、元组和表,通过*arg形式来映射
print('{1}:{0}:{1}'.format(*'QWE'))
web = ['www','baidu','com']
print('{1}:{0}:{1}'.format(*web))
结果:
W:Q:W
baidu:www:baidu
2.1.2 关键字映射
print('名字:{name},年龄:{age}'.format(name='tony',age = 20))
结果:
名字:tony,年龄:20
还可以将元组或字典打散成关键字参数给函数,通过*或**
people = {'name':'tony','age':'20','address':'china'}
print('名字:{name},年龄:{age},地址:{address}'.format(**people))
结果:
名字:tony,年龄:20,地址:china
2.1.3 通过元素映射
需要截取字符串或元组中部分元素进行格式化处理时,用切片,但只能对单个元素进行提取
print('{0[1]}年的{0[0]}'.format(('吴京','2018')))
print('{0[2]}.{0[1]}.{0[0]}'.format(['com','baidu','www']))
print('{0[1]},{1[1]},{0[0]},{1[0]}'.format('吴战','京狼'))
print('{0[0]}.{0[1]}.{0[2]}'.format('www.baidu.com'.split('.')))
结果:
2018年的吴京
www.baidu.com
战,狼,吴,京
www.baidu.com
此方法同样使用于元组,列表,字典,组合
2.1.4 通过传入对象映射
class People:
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return '我是{self.age}岁的{self.name}'.format(self=self)
print(str(People('吴京','18')))
结果:
我是18岁的吴京
2.2 格式化模板标签
就是用 : 后面的格式控制标记来更改格式
主要就是占位之类的
#1.fill,在width内采用什么方式填充,默认空格
print("{:10}".format('Peter'))
#2.align,可选<,>,=,^等,代表宽度内的对其方式
#对于字符串默认左对齐,对数字默认右对齐
print("{:*>10}".format('Peter'))
print("{:0^10}".format('Peter'))
#3.width代表宽度
#4.加.precision代表精度
#5.加type代表类型
结果:
Peter
*****Peter
00Peter000