Python3-字符串格式化

旧式字符串格式化

因为 str.format() 是比较新的函数, 大多数的 Python 代码仍然使用 % 操作符。但是因为这种旧式的格式化最终会从该语言中移除, 应该更多的使用 str.format().

Python 使用 % 格式化字符串,常用占位符如下表所示:

占位符 描述
%s 格式化字符串
%d 格式化整数
%f 格式化浮点数(默认保留6位小数)

实例:

1
2
3
4
print('Hello %s' %'Python')
Hello Python

print ("我叫 %s 今年 %d 岁!" % ('小明', 20))

format() 方法格式化:

1
print('{0} {1}'.format('Hello', 'Python'))

f-string

f-string 是 python3.6 之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。

1
2
name = 'Python'
f'Hello {name}' # 替换变量

实例

%2d 是将数字按宽度为2,采用右对齐方式输出,若数据位数不到2位,则左边补空格。
%02d,和 %2d 一样,只是左边补0。

%-2d 将数字按宽度为2,采用左对齐方式输出,若数据位数不到2位,则右边补空格。
%.2d 输出整形时最少输出2位,如不够前面以0占位。如输出2时变成02,200时只输出200;输出浮点型时( %.2f )小数点后强制2位输出。
%05.2f 输出字符最少5为,不足5位,需要补0,小数点后强制2位输出。

比如:

1
2
3
4
5
6
7
8
9
10
11
import math

num = 1
print("%d" % (num))结果为: (1
print("%2d" % (num))结果为: ( 1
print("%02d" % (num))结果为: (01)
print("%-2d" % (num))结果为: (1
print("%.2d" % (num))结果为: (01)
print("%.2d" % (200))结果为: (200
print('常量 PI 的值近似为:%06.3f。' % math.pi)
常量 PI 的值近似为:03.142

:2d

1
2
for x in range(1, 11):
print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))

:2d 表示两个宽度的10进制数显示。
:3d 表示三个宽度的10进制数显示。
:4d 表示四个宽度的10进制数显示。

双冒号(::)

1
2
3
4
5
6
7
a = '1234567890'

# 两个字符分组,并取每组中第一个出来
print(a[::2])

# 三个字符分组,并取每组中第一个出来
print(a[::3])

输出:

1
2
13579
1470

整数的输出

1
2
3
print('%o' % 20) # 八进制24
print('%d' % 20) # 十进制20
print('%x' % 24) # 十六进制18

浮点数输出

%f 保留小数点后面六位有效数字
%e 保留小数点后面六位有效数字
%g 在保证六位有效数字的前提下,使用小数方式,否则使用科学计数法。

1
2
3
4
5
6
7
print('%f' % 1.11)         # 默认保留6位小数1.110000
print('%.1f' % 1.11) # 取1位小数1.1
print('%e' % 1.11) # 默认6位小数,用科学计数法1.110000e+00
print('%.3e' % 1.11) # 取3位小数,用科学计数法1.110e+00
print('%g' % 1111.1111) # 默认6位有效数字1111.11
print('%.7g' % 1111.1111) # 取7位有效数字1111.111
print('%.2g' % 1111.1111) # 取2位有效数字,自动转换为科学计数法1.1e+03

字符串输出

1
2
3
4
5
6
print('%s' % 'hello world')       # 字符串输出hello world
print('%20s' % 'hello world') # 右对齐,取20位,不够则补位 hello world
print('%-20s' % 'hello world') # 左对齐,取20位,不够则补位hello world
print('%.2s' % 'hello world') # 取2位he
print('%10.2s' % 'hello world') # 右对齐,取2位 he
print('%-10.2s' % 'hello world') # 左对齐,取2位he

对齐方式的取值:

  • <:左对齐
  • >:右对齐
  • ^:居中
  • =:在正负号(如果有的话)和数字之间填充,该对齐选项仅对数字类型有效。它可以输出类似 +0000120 这样的字符串。
1
2
3
4
5
6
7
8
print("|",format("RUNOOB","*>30"),"|")    #左对齐
| ************************RUNOOB |

print("|",format("RUNOOB","*^30"),"|") #居中对齐
| ************RUNOOB************ |

print("|",format("RUNOOB","*<30"),"|") #右对齐
| RUNOOB************************ |