« 上一篇下一篇 »

Python语言实现字符串格式化输出的两种通道介绍

   文章主要介绍了Python字符串格式化常用的两种方法,在这给大家分享分享,具体如下用于字符串的拼接,性能更优。字符串格式化有两种方式:百分号方式、format方式。
 百分号方式比较老,而format方式是比较先进的,企图替代古老的方式,目前两者共存。


1、百分号%方式
格式:%[(name)][flags][width].[precision]typecode
 •(name)    可选,用于选择指定的key
•flags        可选,可供选择的值有: •+  右对齐:正数的加正号,负数的加负号
•-  左对齐:正数前没有负号,负数前加负号

•width    可选,占有宽度
•.precision    可选,小数点后保留的位数
•typecode     必选 •s,获取传入的对象__str__方法的返回值,并将其格式化到指定位置
•r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
•c,整数:将数字转换成其unicode对应的值,10进制范围为0 <= i <=1114111
•o,将整数转换成八进制表示,并将其格式化到指定位置
•x,将整数转换成16进制,并将其格式化到指定位置
•d,将整数,浮点数转化为十进制表示,并将其格式化到指定位置

 

Python字符串的格式化分为两种:1)% 方式    2)str.format()  方式。

str.format() 是比 % 较新的方式, 大多数的 Python 代码仍然使用 % 操作符。但最终会被str.format()代替,推荐使用str.format()

%[(name)][flags][width].[precision]typecode

2)说明

(name)     可选,用于选择指定的key
flags      可选,主要用于数字类型
width       可选,显示宽度,width大于显示的长度用空格填充,小于则原样输出
.precision     可选,,显示长度,字符类型:.precision大于显示长度原样输出,小于则显示前precision位字符。数字类型:小数点后保留的位数
typecode    必选,字符串格式化符号

flags 的选项有:

+     右对齐;在正数前面显示加号“+”
-      左对齐
<sp>    右对齐;正数前用空格填充
0     显示的数字前面填充'0'
#     在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是%x或%X)

typecode 符串格式化符号:

c   格式化字符及其ASCII码
s   格式化字符串
d   格式化整数
u   格式化无符号整型
o   格式化无符号八进制数
x   格式化无符号十六进制数
X   格式化无符号十六进制数(大写)
f    格式化浮点数字,可指定小数点后的精度(默认保留6位小数)
e   用科学计数法格式化浮点数
E   作用同%e,用科学计数法格式化浮点数
g   %f和%e的简写
G   %f和%E的简写
p   十六进制数格式化变量的地址
%  显示一个 "%"

3)实例

>>> "hello %s" % "world"
'hello world'
>>> "%s %d" % ("hello world", 2018)
'hello world 2018'
>>> "hello %10.2s" % "world"    #"world"的显示宽度 10,只显示两位字符
'hello        wo'
>>> "%(name)s, %(age)d" % {"name":"LaoWang", "age":18}    # 通过(name)指定显示的内容
'LaoWang, 18'
>>> "%.2f" % 123.456    # 数字类型,保留两位小数(默认四舍五入)
'123.46'
>>> "%(num).2f" % {"num":123.456}
'123.46'

 

2、str.format()  方式   

1)、用法

:[[fill]align][sign][#][0][minimumwidth][.precision][type]


2)、说明

fill          [可选] 填充字符,默认为 " "  (空格)
#           [可选] 对于二进制、八进制、十六进制,如果加上#,会显示0b/0o/0x,否则不显示
,            [可选] 为数字添加分隔符,如:1,000,000
minimumwidth      [可选] 格式化位所占宽度
.precision        [可选] 小数位保留精度
type         [可选] 格式化类型,与 % 的一样

align  [可选] 对齐方式(需配合width使用)

<  内容左对齐
>  内容右对齐(默认)
=  内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效
^  内容居中

sign  [可选] 有无符号数字

+    在正数前面显示加号"+"
-    在正数前面不显示加号"+"
 <ap>  正数前用空格填充

3)实例

>>> "{} {}".format("hello", 2018)
'hello 2018'
>>> "{0} {1}".format("hello", 2018)
'hello 2018'

>>> l1 = ["hello",2018]
>>> "{0} {1}".format(*l1)    #通过列表设置参数
'hello 2018'

>>> "{0[0]} {0[1]} {1[1]} {1[0]}".format(l1, "abc") #通过索引设置参数
'hello 2018 b a'

>>> "{age} {name}".format(name="zhangsan",age=18)
'18 zhangsan'
>>> d1 = {"name":"zhangsan", "age":18}
>>> "{name} {age}".format(**d1)  #通过字典设置参数
'zhangsan 18'


>>> "{0:-^15}".format("aa")            #居中显示,用"-"填充
'------aa-------'

>>> "{name:<10}".format(name="aa", age=18)    #居左显示
'aa        '
>>> "{age:>10}".format(name="aa", age=18)    #居右显示
'        18'
>>> "{:^10},{:<10.2f}".format("aa", 123.456)    #"aa"居左显示,宽度10;123.456居左显示,宽度10,保留两位小数
'    aa    ,123.46    '

   刚入门python的同学,特别是,没有系统性的学习过python,而是先学过别的语言,直接上手python的同学,怕是还不是很了解python强大的字符串格式化方法。这种字典形式的字符串格式化方法,有一个最大的好处就是,字典这个东西可以和json文件相互转换,所以,当配置文件使用字符串设置的情况,就会觉得非常方便。