str.format 学习
python中格式化字符串的方式有两种,一种是使用"%s"的方式,一种是str.format()的方式,接下来就对这两种方式做个介绍
1.%s的方式
两种用法,第一种是在字符串中使用%s占位,在字符串后使用%替换值来替换,例如:
print("my name is %s and i am %d years old" %("xiaoming",18) 输出结果:my name is xiaoming and i am 18 years old print("Hello,%s" % "Tom") 输出结果:Hello,Tom
该方式的优点是简单,缺点是影响可读性的,在数量多了以后,很难清楚哪一个占位符对应哪一个实参,排序很麻烦
另一种方式可以用字典的形式进行表示:
print ("Hello,%(name)s" % {"name":"Tom"}) # 参数比较多的情况下这样用 value = {"greet": "Hello world", "language": "Python"} print("%(greet)s from %(language)s." % value) print("%(greet)s from %(language)s." % {"greet": "Hello world", "language": "Python"}
常用字符格式有:
- %% 百分号标记 #就是输出一个%
- %c 字符及其ASCII码
- %s 字符串
- %d 有符号整数(十进制)
- %u 无符号整数(十进制)
- %o 无符号整数(八进制)
- %x 无符号整数(十六进制)
- %X 无符号整数(十六进制大写字符)
- %e 浮点数字(科学计数法)
- %E 浮点数字(科学计数法,用E代替e)
- %f 浮点数字(用小数点符号)
- %g 浮点数字(根据值的大小采用%e或%f)
- %G 浮点数字(类似于%g)
- %p 指针(用十六进制打印值的内存地址)
- %n 存储输出字符的数量放进参数列表的下一个变量中
2.format()方式
在python2.6开始,Python中新增加了一个字符串格式化字符的函数str.format(),此函数可以快速的处理各种字符串,增强了字符串格式化的功能。
基本语法是使用{}来替代%。format函数的实参位置可以不按照顺序
1.使用位置参数
要点:位置参数不受顺序约束,且可以为{},只要format里有相对应的参数值即可,参数索引从0开,传入位置参数列表可用*列表
"{} {}".format("hello","world")#设置指定位置,按默认顺序 输出为:'hello world' "{1} {0}".format("world","hello") # 设置指定位置 输出为:'hello world' "{1} {0} {1}".format("hello", "world") # 设置指定位置 输出为:'world hello world' input=["hello", "world"] #传入位置参数列表可用*列表 "{} {}".format(*input) 输出为:'hello world'
2.使用关键字参数,类似于使用字典key值占位,将字典作为参数传入字符串
要点:字符串中的关键字参数要与传入的参数值对得上,可用字典当关键字参数传入值,字典前加**即可
hash = {'name':'Bingo','age':18} 'my name is {name},age is {age}'.format(name='Bingo',age=18) 输出:'my name is Bingo,age is 18' 'my name is {name},age is {age}'.format(**hash)#通过关键字,并用字典当关键字传入值时,在字典前加**即可 输出:'my name is Bingo,age is 18'
3、填充与格式化(:[填充字符][对齐方式 <^>][宽度])
^、<、>分别是居中、左对齐、右对齐,:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充,对齐方式后面紧跟一个整数可以限定该字段的宽度。
'{0:*>10}'.format(9) ##右对齐 输出:'*********9' '{0:*<10}'.format(9) ##左对齐 输出:'9*********' '{0:*^10}'.format(9)##居中对齐 输出:'****9*****'
4、精度与进制
'{0:.2f}'.format(1/3) 输出:'0.33' '{0:b}'.format(10) #二进制 输出:'1010' '{0:o}'.format(10) #八进制 输出:'12' '{0:x}'.format(10) #16进制 输出:'a' '{:,}'.format(12369132698) #千分位格式化 输出:'12,369,132,698'
5、通过下标
my_list = ['xiaoming',18] "name {0[0]}, age {0[1]}".format(my_list) #通过列表索引设置参数 'name xiaoming, age 18'
数字格式化
下表展示了 str.format() 格式化数字的多种方法:
>>> print("{:.2f}".format(3.1415926))
3.14
数字 | 格式 | 输出 | 描述 |
---|---|---|---|
3.1415926 | {:.2f} | 3.14 | 保留小数点后两位 |
3.1415926 | {:+.2f} | +3.14 | 带符号保留小数点后两位 |
-1 | {:+.2f} | -1.00 | 带符号保留小数点后两位 |
2.71828 | {:.0f} | 3 | 不带小数 |
5 | {:0>2d} | 05 | 数字补零 (填充左边, 宽度为2) |
5 | {:x<4d} | 5xxx | 数字补x (填充右边, 宽度为4) |
10 | {:x<4d} | 10xx | 数字补x (填充右边, 宽度为4) |
1000000 | {:,} | 1,000,000 | 以逗号分隔的数字格式 |
0.25 | {:.2%} | 25.00% | 百分比格式 |
1000000000 | {:.2e} | 1.00e+09 | 指数记法 |
13 | {:>10d} | 13 | 右对齐 (默认, 宽度为10) |
13 | {:<10d} | 13 | 左对齐 (宽度为10) |
13 | {:^10d} | 13 | 中间对齐 (宽度为10) |
11 |
'{:b}'.format(11)
'{:d}'.format(11)
'{:o}'.format(11)
'{:x}'.format(11)
'{:#x}'.format(11)
'{:#X}'.format(11)
|
1011
11
13
b
0xb
0XB
|
进制 |
+ 表示在正数前显示 +,负数前显示 -; (空格)表示在正数前加空格
b、d、o、x 分别是二进制、十进制、八进制、十六进制。
扩展:
如果字符串里面含有 "{" 或者 "}"时,需要把 "{" 和 "}" 字符以 "{{" 和 "}}" 代替。
例如:"{'name1':'{0}','name2':'{1}'}".format('qpy','wjx') 该字符串中包含额外的{},执行该命令后,会报错,解决方法是将{}用{{}}代替,即
"{{'name1':'{0}','name2':'{1}'}}".format('qpy','wjx')
参考: