Python 格式化输出

我们在程序调试或者写入文件的时候,为了格式整齐,需要用到格式化的输出,这里使用实例对Python的格式化输出做下总结。

print(f"")

python-3.5以上版本可以使用print(f),省去了使用%的占位,且可以直接输出,不需要考虑类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Person():
def __init__(self):
self.name = "heng"
self.age = 30
name = "heng"
age = 30
weight = {"kg":"80"}
hobby = ["sporting","drinking"]

Person = Person()

print(f"{name}的年龄 {age}、体重 {weight}、爱好 {hobby}",end="***\n")
print(f"class print{Person}, person_name: {Person.name}",end="***\n")

output:

1
2
heng的年龄 30、体重 {'kg': '80'}、爱好 ['sporting', 'drinking']***
class print<__main__.Person object at 0x0000000004F60DA0>, person_name: heng***

print的形式同样可以写入文件中:

1
2
3
with open("out.txt", "w", encoding="utf-8") as fout:
fout.write(f"{name}的年龄 {age}、体重 {weight}、爱好 {hobby}")
# 文件中的形式与print一致

format()

通过{}和:来代替传统%方式

设置位置

1
2
3
4
5
# 不设置指定位置,按默认顺序
"{}**{}".format("hello", "world")
# 设置指定位置,按指定位置顺序输出
"{0}**{1}".format("hello", "world")
"{1}**{0}***{1}".format("hello", "world")

output:

1
2
3
hello**world
hello**world
world**hello***world

设置name

1
2
3
4
5
6
7
8
9
print("姓名 {name}, 年龄 {age}".format(name="heng", age=30))

# 通过字典设置参数
test = {"name": "heng", "age": 30}
print("姓名 {name}, 年龄 {age}".format(**test))

# 通过列表索引设置参数
my_list = ["heng", 30, 80]
print("姓名 {0[0]}, 年龄{0[1]},体重{0[2]}".format(my_list)) # "0" 是必须的,表示当前列表

output:

1
2
3
姓名 heng, 年龄 30
姓名 heng, 年龄 30
姓名 heng, 年龄30,体重80

对齐

^,居中对齐

<,左对齐

>,右对齐

后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
print("{:.2f}".format(3.1415926))
print('{:>10}'.format('heng')) #10个占位符,右对齐
print('{:<10}'.format('heng')) #10个占位符,左对齐
print('{:^10}'.format('heng')) #10个占位符,居中对齐

#如果超出长度,则依次往后排
#占位符和上面相同
print('name:{0:*<10}, age:{1:*<10}'.format('heng11111111111',30)) #10个占位符,居中对齐
print('name:{name:*<10}, age:{age:*<10}'.format(name='heng',age=30)) #10个占位符,居中对齐print("{:.2f}".format(3.1415926))
print('{:>10}'.format('heng')) #10个占位符,右对齐
print('{:<10}'.format('heng')) #10个占位符,左对齐
print('{:^10}'.format('heng')) #10个占位符,居中对齐

#如果超出长度,则依次往后排
#占位符和上面相同
print('name:{0:*<10}, age:{1:*<10}'.format('heng11111111111',30)) #10个占位符,居中对齐
print('name:{name:*<10}, age:{age:*<10}'.format(name='heng',age=30)) #10个占位符,居中对齐

output:

1
2
3
4
5
6
3.14
heng
heng
heng
name:heng11111111111, age:30********
name:heng******, age:30********

参考