网站开发中的paml/查网站流量查询工具
Python的字符串格式化有两种方式:%格式符方式,format方式。下面进行一一讲解。
1 %格式符方式
%[(name)][flags][width].[precision]typecode
- (name) 可选,用于选择指定的key
- flags 可选,可供选择的值有:
- + 右对齐;正数前加正号,负数前加负号;
- - 左对齐;正数前无符号,负数前加负号;
- 空格 右对齐;正数前加空格,负数前加负号;
- 0 右对齐;正数前无符号,负数前加负号;用0填充空白处
- width 可选,占有宽度
- .precision 可选,小数点后保留的位数
- typecode 必选
- s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置
- r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
- c,整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置(仅适用于单个字符)
- o,将整数转换成八进制表示,并将其格式化到指定位置
- x,将整数转换成十六进制表示,并将其格式化到指定位置(小写)
- X,将整数转换成十六进制表示,并将其格式化到指定位置(大写)
- d,将整数、浮点数转换成十进制表示,并将其格式化到指定位置
- e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
- E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
- f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
- F,同上
- g,自动调整将整数、浮点数转换成浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
- G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
- %,当字符串中存在格式化标志时,需要用 %%表示一个百分号
注:Python中百分号格式化是不存在自动将整数转换成二进制表示的方式
1.1 name
(name) 可选,用于选择指定的key
例子:
a = "%(name)s:%(age)d"%{'name':'Tom','age':20}
print(a)
执行结果:
Tom:20
1.2 width
width 可选,用于选择指定字段的宽度
“宽度”是一个十进制整数,用于定义字段宽度。如果未指定,则字段宽度将由内容确定。
s = "y=%d" % 5 #此时字段宽度与要填充的数据大小相同
print(s)
执行结果:
y=5
请注意,除非定义了字段宽度,否则字段宽度将始终与要填充的数据大小相同,因此在这种情况下,对齐选项没有任何意义。
对于整数,指定左对齐时,在右边补 0 是没有效果的,因为这样会改变整数的值。
对于字符串,只能使用-标志,因为符号对于字符串没有意义,而补 0 会改变字符串的值。
此时必须给定宽度。
1.3 flag
- + 右对齐;正数前加正号,负数前加负号;
意思是,在给定宽度内右对齐,并且显示正数的正号和负数的负号。 - - 左对齐;正数前无符号,负数前加负号;
意思是,在给定宽度内左对齐,不显示正数的正号,显示负数的负号。 - 空格 右对齐;正数前加空格,负数前加负号;
意思是,在给定宽度内右对齐,正数前为空格,不显示正数的正号,显示负数的负号 - 0 右对齐;正数前无符号,负数前加负号;用0填充空白处
意思是,在给定宽度内右对齐,不显示正数的正好,空位用0填充,显示负数的负号,空位用0填充 - # 与空格的用法和功能一样
注意事项:
- 可选的“填充”字符定义了用于将字段填充到最小宽度的字符。填充字符(如果存在)必须后跟一个对齐标志。
'flag’选项仅对数字类型有效。 - 对于小数,以上三个标志可以同时存在。
- 对于字符串,只能使用-标志,因为符号对于字符串没有意义,而补 0 会改变字符串的值。
例子:
"""
+ 右对齐;正数前加正号,负数前加负号;
"""s = "我是正数:%5d" % 20
print(s) # 默认右对齐,不显示正数的正号s = "我是正数:%5d" % -20
print(s) # 默认右对齐,显示负数的负号s = "我是正数:%+5d" % 20 # 右对齐,显示正数的正号
print(s)s = "我是负数:%+5d" % -20 # 右对齐,显示负数的负号
print(s)"""
- 左对齐;正数前无符号,负数前加负号;
"""s = "我是正数:%-5d" % 20 # 左对齐,正数前无符号(不显示正数的正号)
print(s)s = "我是负数:%-5d" % -20 # 左对齐,显示负数的负号
print(s)"""
空格 右对齐;正数前加空格,负数前加负号;
"""s = "我是正数:% 5d" % 20 # 右对齐,正数前为空格
print(s)s = "我是负数:% 5d" % -20 # 右对齐,显示负数的负号
print(s)"""
0 右对齐;正数前无符号,负数前加负号;用0填充空白处
"""s = "我是正数:%05d" % 20 # 右对齐,正数前无符号,用0填充空白处
print(s)s = "我是负数:%05d" % -20 # 右对齐,显示负数的负号,用0填充空白处
print(s)"""
# 右对齐;正数前加空格,负数前加负号;
"""s = "我是正数:%#5d" % 20 # 右对齐,正数前无符号
print(s)s = "我是负数:%#5d" % -20 # 右对齐,显示负数的负号
print(s)
执行结果:
我是正数: 20
我是正数: -20
我是正数: +20
我是负数: -20
我是正数:20
我是负数:-20
我是正数: 20
我是负数: -20
我是正数:00020
我是负数:-0020
我是正数: 20
我是负数: -20
1.4 .precision
.precision 可选,小数点后保留的位数
例子:
d1 = '%(p)f'%{'p':3.141592653589793} # 默认保留六位小数
d2 = '%(p).f'%{'p':3.141592653589793} # 默认保留零位小数
d3 = '%(p).1f'%{'p':3.141592653589793} # 默认保留一位小数
d4 = '%(p).2f'%{'p':3.141592653589793} # 默认保留二位小数print(d1)
print(d2)
print(d3)
print(d4)
执行结果:
3.141593
3
3.1
3.14
1.5 typecode
typecode 必选
例子:
s1 = "我是字符串:%8s" % 'asfd'
print(s1)
s2 = "我是字符串:%8r" % 'asfd'
print(s2)
s3 = "我是unicode:%8c" % 20013
print(s3)
s4 = "我是字符串:%8c" % 'a'
print(s4)
s5 = "我是八进制:%8o" % 100
print(s5)
s6 = "我是十六进制:%8x" % 100
print(s6)
s7 = "我是十六进制:%8X" % 100
print(s7)
s8 = "我是十进制:%8d" % 100
print(s8)
s9 = "我是科学计数法:%14e" % 0.0000001
print(s9)
s10 = "我是科学计数法:%14E" % 0.0000001
print(s10)
s11 = "我是浮点数:%10f" % 5
print(s11)
s12 = "我是浮点数:%10F" % 5
print(s12)
s13 = "我是科学计数法:%10g" % 1000000
print(s13)
s14 = "我是科学计数法:%10G" % 1000000
print(s14)
s15 = "及格率=%d%%" % 80
print(s15)
执行结果:
我是字符串: asfd
我是字符串: 'asfd'
我是unicode: 中
我是字符串: a
我是八进制: 144
我是十六进制: 64
我是十六进制: 64
我是十进制: 100
我是科学计数法: 1.000000e-07
我是科学计数法: 1.000000E-07
我是浮点数: 5.000000
我是浮点数: 5.000000
我是科学计数法: 1e+06
我是科学计数法: 1E+06
及格率=80%
str和repr的区别
2 format方式
数字格式的定义以 ‘:’ 号开始。碰到了’: '字符就知道要定义一个数字的显示格式了。格式的定义顺序为
[[fill]align][sign][#][width][,][.precision][type]
- fill 【可选】空白处填充的字符
- align 【可选】对齐方式(需配合width使用)
- <,内容左对齐
- >,内容右对齐(默认)
- =,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
- ^,内容居中
- sign 【可选】有无符号数字
- +,正号加正,负号加负;
- -,正号不变,负号加负;
- 空格 ,正号空格,负号加负;
- # 【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
- , 【可选】为数字添加分隔符,如:1,000,000
- width 【可选】格式化位所占宽度
- .precision 【可选】小数位保留精度
- type 【可选】格式化类型
- 传入” 字符串类型 “的参数
- s,格式化字符串类型数据
- 空白,未指定类型,则默认是None,同s
- 传入“ 整数类型 ”的参数
- b,将10进制整数自动转换成2进制表示然后格式化
- c,将10进制整数自动转换为其对应的unicode字符
- d,十进制整数
- o,将10进制整数自动转换成8进制表示然后格式化;
- x,将10进制整数自动转换成16进制表示然后格式化(小写x)
- X,将10进制整数自动转换成16进制表示然后格式化(大写X)
- 传入“ 浮点型或小数类型 ”的参数
- e, 转换为科学计数法(小写e)表示,然后格式化;
- E, 转换为科学计数法(大写E)表示,然后格式化;
- f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
- F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
- g, 自动在e和f中切换
- G, 自动在E和F中切换
- %,显示百分比(默认显示小数点后6位)
- 传入” 字符串类型 “的参数
2.1 fill、align、width
fill 【可选】空白处填充的字符
align 【可选】对齐方式(需配合width使用)
- <,内容左对齐
- >,内容右对齐(默认)
- =,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
- ^,内容居中
width 【可选】格式化位所占宽度
例子:
s1 ='---{:*^20s}----'.format('welcome') # : 后面开始为format格式化的格式,*为填充字符,^居中,20宽度,s字符串
print(s1)
s2 ='---{:*>20s}----'.format('welcome') # : 后面开始为format格式化的格式,*为填充字符,>右对齐,20宽度,s字符串
print(s2)
s3 ='---{:*<20s}----'.format('welcome') # : 后面开始为format格式化的格式,*为填充字符,<左对齐,20宽度,s字符串
print(s3)
执行结果:
---******welcome*******----
---*************welcome----
---welcome*************----
2.2 sign
sign 【可选】有无符号数字
- +,正号加正,负号加负;
- -,正号不变,负号加负;
- 空格 ,正号空格,负号加负;
例子:
a1 = "我是正数:{:+5d}".format(15) # 正号加正
print(a1)
a2 = "我是负数:{:+5d}".format(-15) # 负号加负
print(a2)
a3 = "我是正数:{:-5d}".format(15) # 正号无符号
print(a3)
a4 = "我是负数:{:-5d}".format(-15) # 负号加负
print(a4)
a5 = "我是正数:{: 5d}".format(15) # 正号无符号
print(a5)
a6 = "我是负数:{: 5d}".format(-15) # 负号加负
print(a6)
执行结果:
我是正数: +15
我是负数: -15
我是正数: 15
我是负数: -15
我是正数: 15
我是负数: -15
2.3 ,
, 【可选】为数字添加分隔符,如:1,000,000
例子:
a="我是正数:{:14,d}".format(100000000)
print(a)
执行结果:
我是正数: 100,000,000
2.4 .precision
.precision 【可选】小数位保留精度
例子:
a1='我是圆周率{:.5f}'.format(3.141592653589793)
print(a1)
执行结果:
我是圆周率3.14159
2.5 #、type
- # 【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
- type 【可选】格式化类型
- 传入” 字符串类型 “的参数
- s,格式化字符串类型数据
- 空白,未指定类型,则默认是None,同s
- 传入“ 整数类型 ”的参数
- b,将10进制整数自动转换成2进制表示然后格式化
- c,将10进制整数自动转换为其对应的unicode字符
- d,十进制整数
- n,同d
- o,将10进制整数自动转换成8进制表示然后格式化;
- x,将10进制整数自动转换成16进制表示然后格式化(小写x)
- X,将10进制整数自动转换成16进制表示然后格式化(大写X)
- 空白,未指定类型,则默认是None,同d
- 传入“ 浮点型或小数类型 ”的参数
- e, 转换为科学计数法(小写e)表示,然后格式化;
- E, 转换为科学计数法(大写E)表示,然后格式化;
- f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
- F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
- g, 自动在e和f中切换
- G, 自动在E和F中切换
- n,同g
- 空白,未指定类型,则默认是None,同g
- %,显示百分比(默认显示小数点后6位)
【访问的方式】
例子:
# 按位置访问参数:
s5='{0}, {1}, {2}'.format('a', 'b', 'c')
s6='{}, {}, {}'.format('a', 'b', 'c')
s7='{2}, {1}, {0}'.format('a', 'b', 'c')
s8='{2}, {1}, {0}'.format(*'abc') # unpacking argument sequence
s9='{0}{1}{0}'.format('abra', 'cad') # arguments' indices can be repeated
print(s5)
print(s6)
print(s7)
print(s8)
print(s9)
# 按名称访问参数:
s10='Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
print(s10)
coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
s11='Coordinates: {latitude}, {longitude}'.format(**coord )
print(s11)
# 访问参数项:
coord = (3, 5)
s12='X: {0[0]}; Y: {0[1]}'.format(coord)
print(s12)
# 代替 %s and %r:
s13="repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
print(s13)
执行结果:
a, b, c
a, b, c
c, b, a
c, b, a
abracadabra
Coordinates: 37.24N, -115.81W
Coordinates: 37.24N, -115.81W
X: 3; Y: 5
repr() shows quotes: 'test1'; str() doesn't: test2
注意:
!符号,这个只在fromat中有用,详情请浏览:https://blog.csdn.net/a19990412/article/details/80149112
【不同的type】
例子:
s1 ='---{:*^20s}----'.format('welcome')
print(s1) # 传入“字符串类型”的参数
s2 = "numbers: {:b},{:o},{:d},{:x},{:X},{:n},{:},{:c}".format(15, 15, 15, 15, 15, 15, 15, 65)
s3 = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X},{0:n},{0:},{1:c}".format(15,65)
s4 = "numbers: {num:b},{num:o},{num:d},{num:x},{num:X},{num:n},{num:},{cc:c}".format(num=15,cc=65)
s5 = "numbers: {:e},{:E},{:f},{:F},{:g},{:G},{:n},{:},{:.2%}".format(0.0000001, 0.0000001, 15, 15, 1000000, 1000000, 15, 15, 0.85)
s6 = "numbers: {0:e},{0:E},{1:f},{1:F},{2:g},{2:G},{1:n},{1:},{3:.2%}".format(0.0000001, 15, 1000000, 0.85)
print(s2)
print(s3)
print(s4)
print(s5)
print(s6)
执行结果;
---******welcome*******----
numbers: 1111,17,15,f,F,15,15,A
numbers: 1111,17,15,f,F,15,15,A
numbers: 1111,17,15,f,F,15,15,A
numbers: 1.000000e-07,1.000000E-07,15.000000,15.000000,1e+06,1E+06,15,15,85.00%
numbers: 1.000000e-07,1.000000E-07,15.000000,15.000000,1e+06,1E+06,15,15,85.00%
【type-n:随着参数的类型改变】
例子:
a1 = "{:n}".format(15)
print(a1)
a2 = "{:n}".format(0.00000015)
print(a2)
执行结果:
15
1.5e-07
【type-空白:随着参数的类型改变】
例子:
b1 = "{:}".format('b')
print(b1)
b2 = "{:}".format(15)
print(b2)
b3 = "{:}".format(0.00000015)
print(b3)
执行结果:
b
15
1.5e-07
本文来自许多优秀博文的总结,如果感觉本文对您有用,欢迎点赞收藏加关注,方便日后翻阅。如若本文存在错误,同样也欢迎各位路过的大佬批评指正!
推荐阅读:
【Python基础】07.Python基本数据类型之字符串(1)
【Python基础】06.序列
【Python基础】关于字符编码(ASCII,GB2312,Unicode,UTF-8,UTF-16,UTF-32),有这一篇就够了!
【Python基础】05.Python基本数据类型之数字
【Python基础】04.运算符(超详细)
【Python基础】03.基本概念(表达式、语句等)以及标识符和关键字
【Python基础】02.Python环境搭建以及PyCharm的安装和配置
【Python基础】01.Python简介
计算机与编程基础知识
参考链接:
[1]:https://www.cnblogs.com/songdanlee/p/11105807.html
[2]:https://docs.python.org/2.7/library/stdtypes.html?highlight=format#string-formatting
[3]:https://docs.python.org/3/library/string.html#formatstrings
未完待续…