python3的格式化输出---str.format()


title: python3的格式化输出—str.format()
date: 2019-07-17 13:28:14
tags: 编程语言
categories: Python


个人博客地址:https://chenchenxiaojian.github.io/python字符串的格式输出/

按位置访问参数

print('{}, {}, {}'.format('a', 'b', 'c'))
print('{1}, {2}, {0}'.format('a', 'b', 'c'))
print('{1}{0}{1}'.format('ab', 'hj'))

# a, b, c
# b, c, a
# hjabhj

按名称访问参数

print('按名称访问参数1:{chen1},{chen2}'.format(chen1="你好", chen2="你也好啊"))
dict1 = {'chen1': "你好", 'chen2': "你也好啊"}
print("按名称访问参数2: {chen1}{chen2}".format(**dict1))
# 按名称访问参数1:你好,你也好啊
# 按名称访问参数2: 你好你也好啊

访问参数的属性

complex1 = 3-5j
print("这个复数{0}的实数是:{0.real},虚数是{0.imag}".format(complex1))

# 这个复数(3-5j)的实数是:3.0,虚数是-5.0

访问参数的项

tuple1 = (3, 5)
list1 = [3, 5]
print("元组的元素为:{0[0]}, {0[1]}".format(tuple1))
print("列表的元素为:{0[0]}, {0[1]}".format(list1))

# 元组的元素为:3, 5
# 列表的元素为:3, 5

替代%s和%r

print("repr()表示的数:{!r}, str()表示的数:{!s}".format('test1', 'test2'))

# repr()表示的数:'test1', str()表示的数:test2

对齐文本以及指定宽度

print("{:<30}".format('左对齐'))
print("{:>30}".format('右对齐'))
print("{:^30}".format('居中对齐'))
print("{:*^30}".format('居中对齐'))
print("{:*<30}".format('左对齐'))
print("{:*>30}".format('右对齐'))

# 左对齐
#                            右对齐
#              居中对齐
# *************居中对齐*************
# 左对齐***************************
# ***************************右对齐

替代 %+f, %-f 和 % f 以及指定正负号:

# '+' 表示标志应该用于正数和负数。

# '-' 表示标志应仅用于负数(这是默认行为)。

# space 表示应在正数上使用前导空格,在负数上使用减号

print("{:+f}; {:+f}".format(3.14, -3.14))
print("{: f}; {: f}".format(3.14, -3.14))
print("{:-f}; {:-f}".format(3.14, -3.14))

# +3.140000; -3.140000
#  3.140000; -3.140000
# 3.140000; -3.140000

替代 %x 和 %o 以及转换基于不同进位制的值:

print("十进制:{0:d}; 十六进制:{0:x}; 八进制:{0:o}; 二进制:{0:b}".format(42))
# 十进制:42; 十六进制:2a; 八进制:52; 二进制:101010

print("十进制:{0:d}; 十六进制:{0:#x}; 八进制:{0:#o}; 二进制:{0:#b}".format(42))
# 十进制:42; 十六进制:0x2a; 八进制:0o52; 二进制:0b101010
# 注意{}中的0一定要加,因为format()里面此时只有一个参数,而前面的槽有4个
# 在这里format里面的参数和前面的槽是一一对应的,因此当槽的个数大于参数时就会出现报错

使用逗号作为千位分隔符

print("{1:,}||||||{0:,}".format(1234567890, 9999999999999999))
# 9,999,999,999,999,999||||||1,234,567,890

表示百分数

a = 1
b = 3
print("10除3等于:{:.2%}".format(a/b))
print("10除3等于:{:.3%}".format(a/b))
print("10除3等于:{:.4%}".format(a/b))
# 10除3等于:33.33%
# 10除3等于:33.333%
# 10除3等于:33.3333%

使用特定类型的专属格式化

import datetime
d = datetime.datetime(2019, 7, 17, 10, 53, 58)
print(type(d))
print(d)
print(str(d))
print(repr(d))
# <class 'datetime.datetime'>
# 2019-07-17 10:53:58
# 2019-07-17 10:53:58
# datetime.datetime(2019, 7, 17, 10, 53, 58)
print('{:%Y-%m-%d %H:%M:%S}'.format(d))

# 2019-07-17 10:53:58
# 所以直接输出d就行.....

嵌套参数以及更复杂的示例:

ip = [192, 168, 0, 1]
print("转换为16进制为:{:02X}|{:02X}|{:02X}|{:02X}".format(*ip))
print("转换为16进制为:{:2X}|{:2X}|{:2X}|{:2X}".format(*ip))
print("转换为16进制为:{:3X}|{:3X}|{:3X}|{:3X}".format(*ip))
print("转换为16进制为:{:03X}|{:03X}|{:03X}|{:03X}".format(*ip))

#总之注意“:”前面的数字要与format()内的参数个数对应,而十六进制的"X""x"是控制大于9的字母的大小写

# 转换为16进制为:C0|A8|00|01
# 转换为16进制为:C0|A8| 0| 1
# 转换为16进制为: C0| A8|  0|  1
# 转换为16进制为:0C0|0A8|000|001

width = 5
for num in range(5, 12):
    for base in "dXob":
        print('{0:{width}{base}}'.format(num, width=width, base=base), end=" ")
    print()

#     5     5     5   101
#     6     6     6   110
#     7     7     7   111
#     8     8    10  1000
#     9     9    11  1001
#    10     A    12  1010
#    11     B    13  1011

补充:int():用于将一个字符串或数字转换为整型。

int(x, base=10) x–字符串或数字; base–进制数,默认是十进制

int('12',16)        
# 如果是带参数base的话,12要以字符串的形式进行输入,12 为 16进制
#因此12是一个十六进制数,所以转化为二进制数为0001 0010,将二进制数转化成十进制数为:2+16 =18,输出为18
发布了29 篇原创文章 · 获赞 6 · 访问量 463

猜你喜欢

转载自blog.csdn.net/weixin_42100456/article/details/96303235