0%

Python格式化字符串

Python 格式化字符串

Python的格式化输出方法很多,相比较于C还是有很多便捷的方面。
下面开始说说。

格式化操作符 %

%是Python风格的字符串格式化字符串,与C语言中的printf函数的字符串类似。

下面是一些格式化的集合

格式化符号 说明
%c 转换成字符串
%r 优先使用repr函数进行字符串转换
%s 优先用str函数进行字符串转换
%d %i 转成有符号十进制
%u 转成无符号十进制
%o 转成无符号八进制
%x %X 转成无符号十六进制,x/X表示小大写
%e %E 转成科学计数法,e/E控制输出e/E
%f %F 转成浮点数
%g %G %e与%f的简写
%% 输出%

示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
a = 'x'
string = 'hello world\n'
n = 12
f = 3.1415

print ('%c' % a)
print ('%r' % string)
print ('%s' % string)
print ('%d' % n)
print ('%i' % n)
print ('%u' % n)
print ('%o' % n)
print ('%x' % n)
print ('%X' % n)
print ('%f' % f)
print ('%F' % f)
print ('%e' % f)
print ('%E' % f)
print ('%g' % f)
print ('%G' % f)

输出如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
x
'hello world\n'
hello world

12
12
12
14
c
C
3.141500
3.141500
3.141500e+00
3.141500E+00
3.1415
3.1415

这里比较需要留意的是str与repr两个内建函数之间的差异。

格式化操作符辅助符号

如果希望输出的时候美化输出,通常下面的一些辅助符号会起到比较好的作用。

辅助符 作用
* 定义宽度或者小数点精度
- 左对齐
+ 在正数前面加上加号+
# 在八进制前面显示0,十六进制前面加上0x或者0X,取决于用的是x还是X
0 显示的数字前面填充0而不是默认的空格
(var) 映射变量,通常用来吹了字段类型的参数
m.n m是显示的最小总宽度,n表示的是小数点后面的位数

示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
n = 1234
f = 3.1415926
students = [{'name': 'Han Meimei', 'age': 17}, {'name': 'Li Lei', 'age': 18}, {'name': 'Wei Hua', 'age': 17}]

print('%d => hex => %x' % (n, n))
print('%d => hex => %X' % (n, n))
print('%d => hex => %#x' % (n, n))
print('%d => hex => %#X' % (n, n))
print('value f is %f' % f)
print('value f is %.4f' % f)
print('name: %10s, age: %10d' % (students[0]['name'], students[0]['age']))
print('name: %-10s, age: %-10d' % (students[1]['name'], students[1]['age']))
print('name: %*s, age: %0*d' % (10, students[1]['name'], 10, students[1]['age']))

for student in students:
print('%(name)s is %(age)d years old' % student)

输出结果如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
1234 => hex => 4d2
1234 => hex => 4D2
1234 => hex => 0x4d2
1234 => hex => 0X4D2
value f is 3.141593
value f is 3.1416
name: Han Meimei, age: 17
name: Li Lei , age: 18
name: Li Lei, age: 0000000018
Han Meimei is 17 years old
Li Lei is 18 years old
Wei Hua is 17 years old

字符串模板

示例如下:

1
2
3
4
5
6
7
from string import Template

s = Template('Hi, $name! $name is $age years old.')
print(s.substitute(name='Han Meimei', age='17'))

hmm = {'name' : 'Han Meimei', 'age': 17}
print(s.substitute(hmm))

输出结果如下:

1
2
Hi, Han Meimei! Han Meimei is 17 years old.
Hi, Han Meimei! Han Meimei is 17 years old.

字符串内建函数format

从Python2.6开始,新增了一种格式化字符串的字符串str.format,通过这个函数可以对字符串进行格式化处理。在format函数中,使用{}符号来当做格式化操作符。

示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 位置参数

print('{0} is {1} years old.'.format('lily', 18))
print('{} is {} years old.'.format('lily', 18))
print('Hi {0}. {0} is {1} years old.'.format('lily', 18))

# 关键字参数
print('{name} is {age} years old'.format(name='lily', age=18))

# 下标参数
lily = ['lily', 18]
print('{0[0]} is {0[1]} years old'.format(lily))

# 填充与对齐
# ^<>分别表示居中、左对齐、右对齐,后面带宽度
# :后面带填充的字符,只能是一个字符,不知道的的话用空格填充

print('{:>8}'.format('3.14'))
print('{:<8}'.format('3.14'))
print('{:^8}'.format('3.14'))
print('{:0>8}'.format('3.14'))
print('{:a>8}'.format('3.14'))

# 浮点数精度
print('{:.4f}'.format(3.1415926))
print('{:0>10.4f}'.format(3.1415926))

# 进制
# b/d/o/x分别表示二进制、十进制、八进制、十六进制
print('{:b}'.format(12))
print('{:d}'.format(12))
print('{:o}'.format(12))
print('{:x}'.format(12))
print('{:#x}'.format(12))
print('{:#X}'.format(12))

# 千位分隔符
print('{:,}'.format(1230000000))

输出结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
lily is 18 years old.
lily is 18 years old.
Hi lily. lily is 18 years old.
lily is 18 years old
lily is 18 years old
3.14
3.14
3.14
00003.14
aaaa3.14
3.1416
00003.1416
1100
12
14
c
0xc
0XC
1,230,000,000
处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道