字符串的格式化
字符串的格式化种类
1、%:功能有限。比较古老
2、str.format():功能比较多,技术比较新(有可能替代掉%的趋势)
如图:
格式化输出
实例1:独立元素格式化:(*args)
1 #方法1: 2 s1 = "i am {0},age {1}".format('alex',19) 3 print('s1 -->',s1) 4 5 6 #方法2: 7 s2 = "i am {0},age {1}".format(*['alex',19]) 8 print('s2 -->',s2) 9 10 显示结果: 11 s1 --> i am alex,age 19 12 s2 --> i am alex,age 19
实例2:通过字典格式化(**kwargs)
1 #方法1: 2 s3 = "i am {name},age {age}".format(name='alex',age=19) 3 print('s3 -->',s3) 4 5 6 #方法2: 7 dic={'name':'alex','age':19} 8 s4 = "i am {name},age {age}".format(**dic) 9 print('s4 -->',s4) 10 11 显示结果: 12 s3 --> i am alex,age 19 13 s4 --> i am alex,age 19
字符串格式化----百分号方式(%)
一、%的格式化功能:
格式:%[(name)][flags][width].[precision]typecode
1 (name):可选,用于选择指定的key 2 flags: 可选,可供选择的值有: 3 +: 右对齐;正数前加正好,负数前加负号; 4 -: 左对齐;正数前无符号,负数前加负号; 5 空格: 右对齐;正数前加空格,负数前加负号; 6 0: 右对齐;正数前无符号,负数前加负号;用0填充空白处 7 width: 可选,占有宽度 8 .precision:可选,小数点后保留的位数 9 typecode:必选 10 s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置 11 r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置 12 c,整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置 13 o,将整数转换成 八 进制表示,并将其格式化到指定位置 14 x,将整数转换成十六进制表示,并将其格式化到指定位置 15 d,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置 16 e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e) 17 E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E) 18 f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位) 19 F,同上 20 g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;) 21 G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;) 22 %,当字符串中存在格式化标志时,需要用 %%表示一个百分号 23 24 注:Python中百分号格式化是不存在自动将整数转换成二进制表示的方式
二、常用的格式化操作:
1 #字符串: 2 tpl = "i am %s" % "alex" 3 print('tpl--->',tpl) 4 5 #字符串 + 数字 6 tpl1 = "i am %s age %d" % ("alex", 18) 7 print('tpl1--->',tpl1) 8 9 #别名 + {} 方式 10 tpl2 = "i am %(name)s age %(age)d" % {"name": "alex", "age": 18} 11 print('tpl2--->',tpl2) 12 13 #浮点 + 提取指定位数 14 tpl3 = "percent %.2f" % 99.97623 15 print('tpl3--->',tpl3) 16 17 #别名 + 浮点 + 提取指定位数 18 tpl4 = "i am %(pp).2f" % {"pp": 123.425556, } 19 print('tpl4--->',tpl4) 20 21 #显示"%"号 + 别名 + 浮点 + 提取指定位数 22 tpl5 = "i am %(pp).2f %%" % {"pp": 123.425556, } 23 print('tpl5--->',tpl5) 24 25 26 显示结果: 27 tpl---> i am alex 28 tpl1---> i am alex age 18 29 tpl2---> i am alex age 18 30 tpl3---> percent 99.98 31 tpl4---> i am 123.43 32 tpl5---> i am 123.43 %
三、其他练习:
1 1、占位符格式化: 2 s = "讲课老师%s,年龄%d,听课学生%s" %('alex',32,'dy') 3 print(s) 4 5 #输出结果: 6 讲课老师alex,年龄32,听课学生dy 7 8 9 2、占位符别名格式化:(name:可用 "{ }" 进行传值) 10 s = "讲课老师: %(teacher)s,年龄: %(age)d,听课学生: %(students)s" %{'teacher':'alex','age':32,'students':'dy'} 11 print(s) 12 13 #输出结果: 14 讲课老师: alex,年龄: 32,听课学生: dy 15 16 17 3、左右对齐方式:【flags:需要结合宽度(width)一起使用】 18 s = "讲课老师: %(teacher)+10s,年龄: %(age)d,听课学生: %(students)s" %{'teacher':'alex','age':32,'students':'dy'} 19 print(s) 20 21 #输出结果 22 讲课老师: alex,年龄: 32 ,听课学生: dy 23 24 25 26 4、正负数的值: 27 s = "讲课老师: %(teacher)-10s,年龄: %(age)+10d,听课学生: %(students)+10s,年龄:%(age1)-10d" %{'teacher':'alex','age':+32,'students':'dy','age1':-30} 28 print(s) 29 30 #输出结果: 31 讲课老师: alex ,年龄: +32,听课学生: dy,年龄:-30 32 33 34 35 5、浮点: 36 s = "讲课老师: %(teacher)-10s,年龄: %(age)+10d,听课学生: %(students)+10s,年龄:%(age1)-10d,%(p)f" \ 37 %{'teacher':'alex','age':+32,'students':'dy','age1':-30,"p":1.234567} 38 print(s) 39 40 #显示结果: 41 讲课老师: alex ,年龄: +32,听课学生: dy,年龄:-30 ,1.234567 42 43 44 45 6、浮点保留"N"为小数: 46 s = "讲课老师: %(teacher)-10s,年龄: %(age)+10d,听课学生: %(students)+10s,年龄:%(age1)-10d,%(p).2f" \ 47 %{'teacher':'alex','age':+32,'students':'dy','age1':-30,"p":1.234567} 48 49 print(s) 50 51 #x显示结果: 52 讲课老师: alex ,年龄: +32,听课学生: dy,年龄:-30 ,1.23
字符串格式化---Format方式
一、format格式化与百分号的有差异:
1、支持占位符填充
2、可以居中
3、%可以进行转换百分比
4、#可以2 4 8进制的添加
........
二、格式:
1 [[fill]align][sign][#][0][width][,][.precision][type] 2 3 4 fill :【可选】在空白处填充的字符(只能填充一个字符) 5 align:【可选】对齐方式(需配合width使用) 6 <,内容左对齐 7 >,内容右对齐(默认) 8 =,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字 9 ^,内容居中 10 sign:【可选】有无符号数字 11 +,正号加正,负号加负; 12 -,正号不变,负号加负; 13 空格 ,正号空格,负号加负; 14 # :【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示 15 , :【可选】为数字添加分隔符,如:1,000,000 16 width:【可选】格式化位所占宽度 17 .precision:【可选】小数位保留精度 18 type :【可选】格式化类型 19 传入” 字符串类型 “的参数 20 s,格式化字符串类型数据 21 空白,未指定类型,则默认是None,同s 22 传入“ 整数类型 ”的参数 23 b,将10进制整数自动转换成2进制表示然后格式化 24 c,将10进制整数自动转换为其对应的unicode字符 25 d,十进制整数 26 o,将10进制整数自动转换成8进制表示然后格式化; 27 x,将10进制整数自动转换成16进制表示然后格式化(小写x) 28 X,将10进制整数自动转换成16进制表示然后格式化(大写X) 29 传入“ 浮点型或小数类型 ”的参数 30 e, 转换为科学计数法(小写e)表示,然后格式化; 31 E, 转换为科学计数法(大写E)表示,然后格式化; 32 f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化; 33 F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化; 34 g, 自动在e和f中切换 35 G, 自动在E和F中切换 36 %,显示百分比(默认显示小数点后6位)
三、传参:
1 tpl = "i am {}, age {}, {}".format("seven", 18, 'alex') 2 print('tpl--->',tpl) 3 4 #*+列表+位置传值:(如果传值列表,必须要加上 " * ",如果不加*,则会把整个列表当初一个元素) 5 tpl1 = "i am {}, age {}, {}".format(*["seven", 18, 'alex']) 6 print('tpl1--->',tpl1) 7 8 9 #索引的方式传值: 10 tpl2 = "i am {0}, age {1}, really {0}".format("seven", 18) 11 print('tpl2--->',tpl2) 12 13 14 #索引+列表+(*args)传值: 15 tpl3 = "i am {0}, age {1}, really {0}".format(*["seven", 18]) 16 print('tpl3--->',tpl3) 17 18 19 #别名传值: 20 tpl4 = "i am {name}, age {age}, really {name}".format(name="seven", age=18) 21 print('tpl4--->',tpl4) 22 23 24 #别名+(**kwargs)传值: 25 tpl5 = "i am {name}, age {age}, really {name}".format(**{"name": "seven", "age": 18}) 26 print('tpl5--->',tpl5) 27 28 29 #索引+索引【下标】的传值: 30 tpl6 = "i am {0[0]}, age {0[1]}, really {0[2]}".format([1, 2, 3], [11, 22, 33]) 31 print('tpl6--->',tpl6) 32 33 34 #指定类型传值:字符串、数字、小数点 35 tpl7 = "i am {:s}, age {:d}, money {:f}".format("seven", 18, 88888.1) 36 print('tpl7--->',tpl7) 37 38 39 #指定类型+顺序+(*args)传值: 40 tpl8 = "i am {:s}, age {:d}".format(*["seven", 18]) 41 print('tpl8--->',tpl8) 42 43 44 #别名+指定类型传值: 45 tpl9 = "i am {name:s}, age {age:d}".format(name="seven", age=18) 46 print('tpl9--->',tpl9) 47 48 49 #别名+指定类型+(**kwargs)传值: 50 tpl10 = "i am {name:s}, age {age:d}".format(**{"name": "seven", "age": 18}) 51 print('tpl10--->',tpl10) 52 53 54 #2 8 10 16进制+百分号传值 55 tpl11 = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2) 56 print('tpl11--->',tpl11) 57 58 59 tpl12 = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2) 60 print('tpl12--->',tpl12) 61 62 63 #索引+2 8 10 16+百分号传值: 64 tpl13 = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}".format(15) 65 print('tpl13--->',tpl13) 66 67 68 #别名+2 8 10 16 +百分号传值: 69 tpl14 = "numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15) 70 print('tpl14--->',tpl14) 71 72 73 输出结果: 74 tpl---> i am seven, age 18, alex 75 tpl1---> i am seven, age 18, alex 76 tpl2---> i am seven, age 18, really seven 77 tpl3---> i am seven, age 18, really seven 78 tpl4---> i am seven, age 18, really seven 79 tpl5---> i am seven, age 18, really seven 80 tpl6---> i am 1, age 2, really 3 81 tpl7---> i am seven, age 18, money 88888.100000 82 tpl8---> i am seven, age 18 83 tpl9---> i am seven, age 18 84 tpl10---> i am seven, age 18 85 tpl11---> numbers: 1111,17,15,f,F, 1587.623000% 86 tpl12---> numbers: 1111,17,15,f,F, 1587.623000% 87 tpl13---> numbers: 1111,17,15,f,F, 1500.000000% 88 tpl14---> numbers: 1111,17,15,f,F, 1500.000000%
更多格式化方法
https://docs.python.org/3/library/string.html