Python格式化输出总结
一、 %方法:
%s是占位符或者格式化字符
python字符串格式化符号:
符号 | 描述 |
---|---|
%s | 格式化字符串 |
%d | 格式化整数 |
%f | 格式化浮点数字,可指定小数点后的精度 |
%c | 格式化字符及其ASCII码 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
格式化操作符辅助指令:
符号 | 功能 |
---|---|
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号( + ) |
在正数前面显示空格 | |
# | 在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’) |
0 | 显示的数字前面填充’0’而不是默认的空格 |
% | ‘%%‘输出一个单一的’%’ |
(var) | 映射变量(字典参数) |
m.n. | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
其撰写格式为:
%[-][+][0][m][.n]格式化字符 % 参数
代码示例:
# m占位宽度
tempate = "格式化的内容是 |%20s|"
print(tempate % 'hello')
tempate = "格式化的内容是 |%-20s|"
print(tempate % 'hello')
tempate = "格式化的内容是 |%.2s|"
print(tempate % 'hello')
# 定义字符串变量 name,输出 我的名字叫 小明,请多多关照!
name = "大小明"
print("我的名字叫 %s,请多多关照!" % name)
# 定义整数变量 student_no,输出 我的学号是 000001
student_no = 100123456
print("我的学号是 %06d" % student_no)
# 定义小数 price、weight、money,
# 输出 苹果单价 9.00 元/斤,购买了 5.00 斤,需要支付 45.00 元
price = 8.5
weight = 7.5
money = price * weight
print("苹果单价 %.2f 元/斤,购买了 %.3f 斤,需要支付 %.4f 元" % (price, weight, money))
# 定义一个小数 scale,输出 数据比例是 10.00%
scale = 0.8
print("数据比例是 %.2f%%" % (scale * 100))
以下这样写也是对的
在达到默认长度时不用填充
关于十六进制:
#输出十六进制示例
a=15
b=0x15
c=15
print("a=%d"%a)
print("b=%x"%b)
print("c=%x"%c)
print("c=%#x"%c)
print("c=%X"%c)
换行问题
在 Python 中 print 默认是换行的:
>>>for i in range(0,3):
... print (i)
...
0
1
2
>>>
要想不换行你应该写成 print(i, end = ‘’ )
>>>for i in range(0,3):
... print(i, end = '' )
...
012
print 会自动在行末加上回车, 如果不需回车,只需在 print 语句的结尾添加一个逗号 , 并设置分隔符参数 end,就可以改变它的行为
>>>for i in range(0,6):
... print(i)
...
0
1
2
3
4
5
>>> for i in range(0,6):
... print(i, end=" ")
...
0 1 2 3 4 5
补充:金额千分位%方法实现要调用format(并不是下一节要说的str.format)
#金额千分位格式化 format
tempate = "千分位格式化 %s"
print(tempate%format(123456.678,','))
二、 str.format()方法:
大佬文章传送门:Python 中 str.format() 方法详解
1.优点
%方法有很多问题不能解决,而这个要更加灵活,比如方法1可以实现“13”前填充“0”,但是很难实现类似于"+++++++++ab+++++"这样的填充。
在比如在进行多进制输出时,会重复传入参数,如下图:
# 多个一样的参数
tempate = "这个数是:%d,十六进制是:%x,八进制是:%o"
print(tempate%(12,12,12))
12传了三次,而使用方法2就很好的解决这些问题
2.符号含义
str.format() 方法通过字符串中的花括号 {} 来识别替换字段,从而完成字符串的格式化。
替换字段 由字段名和转换字段 以及格式说明符 format specifier 组成,一般形式为:
{字段名!转换字段:格式说明符}。
符号 | 含义 |
---|---|
index | 参数的序号或者键 |
fill | 填充的字符(任意字符填充) |
align | 对齐方式 |
sign | 符号选项 |
# | 十六进制x 八进制 o二进制b 数前面加x o b |
m | 占位宽度 |
, | 千分位 |
.n | 小数位数 |
type | 格式化字符类型s d b x o f |
align | 对齐方式 (配合填充使用) |
---|---|
< | 左对齐 |
> | 右对齐 |
^ | 居中对齐 |
= | 右对齐符号在最左侧需要配合占位宽度使用 |
sign | 符号选项 |
---|---|
+ | 正数正号,负数负号 |
- | 正数不变,负数负号 |
空格 | 正数加空格负数负号 |
3.indedx参数
index参数有三种情况:
- 省略不写 {}
- 数字 {十进制非负整数}
- 变量名 {合法的Python标识符}
代码示例:
print("{} {} {}".format(1,2,3))
print("{0} {1} {0}".format(1,2))
a=12
print("这个数是:{0},十六进制是:{0:0x},八进制是:{0:0o}".format(a))
4.字符串 s (默认左对齐)
代码示例:
关于对齐:
# s
print("{:s}".format('hello'))
print("|{:20s}|".format('hello'))# 默认左对齐
print("|{:>20s}|".format('hello'))# 右对齐
print("|{:^20s}|".format('hello'))# 居中
print("|{:20.2s}|".format('hello'))# ".n"在字符串中表示截取,在浮点数中表示精度
关于填充:
注意:[:[fill]align]的形式表示,在进行填充之前一定要有对齐方式,即使是默认的左对齐也要加“<”,数值型是可以省略的
print("|{:+^20s}|".format('hello'))
print("|{:*<20s}|".format('hello'))
print("|{:2>20s}|".format('hello'))
5.数值型 d x o b (默认右对齐)
关于对齐:
print("|{:20d}|".format(13))# 默认右对齐
print("|{:020d}|".format(13))
print("|{:*<20d}|".format(13))
print("|{:-^20d}|".format(13))
关于进制
print("{0:d} {0:x} {0:o} {0:b}".format(13))
print("{0:#d} {0:#x} {0:#o} {0:#b}".format(13)) # ’#‘显示进制
print("|{0:-^12d}{0:-^12x}{0:-^12o}{0:-^12b}|".format(13))
print("|{0:-^#12d}{0:-^#12x}{0:-^#12o}{0:-^#12b}|".format(13))
关于正负:
#正负
print("| {:d} || {:d} |".format(13,-13))
print("| {:+d} || {:+d} |".format(13,-13)) #’+‘:正数正号,负数负号
print("| {:-d} || {:-d} |".format(13,-13)) #’-‘:正数不变,负数负号
print("| {: d} || {: d} |".format(13,-13)) #’‘: 正数加空格负数负号
5.浮点数 f
#浮点数 F
print("{:f}".format(12345.6789))
print("{:.2f}".format(12345.6789))
print("{:20.2f}".format(12345.6789))
6.参数传递
#参数传递
print("{} {} {}".format(1,2,3))
#关键字传参
print("{name} {age} {sex}".format(name='Jhon',age=18,sex='man'))
print("{name} {age:-<10d} {sex}".format(name='Jhon',age=18,sex='man'))
#使用元祖
par = (7,8,9)
print("{} {} {}".format(par[0],par[1],par[2]))
print("tuple:{0[0]} {0[1]} {0[2]}".format(par))
#使用字典
par = {"x":1,"y":2,"z":3}
print("dict:{0[x]} {0[y]} {0[z]}".format(par))
7.千分位、金额
print("{:,.2f}元".format(12345.6789))
三、 f-string(Python3.6版本新方法):
format方法的变形,要更方便一点,就是在方法2的基础上改变了传参的新写法,语法基本一样
代码示例:
name = 'johny'
age = 18
salary = 19999.2135
print('我是{} 我的年龄是{},薪水{}元'.format(name,age,salary))
print(f'我是{name} 我的年龄是{age},薪水{salary}元')
print(f'我是{name} 我的年龄是{age},薪水{salary:.3f}元')#和format语法相同
print(f'我是{name:.2s} 我的年龄是{age:010d},薪水{salary:,.3f}元')
方法3比方法2更优的是,在{}块中是支持方法调用的,这是f-string最强大的地方,可以调用字符串固有的方法,也可以调用自己创建的类方法,就有更加灵活的使用
name = 'johny'
age = 18
salary = 19999.2135
print(f'我是{name.capitalize()}')#调用字符串首字母大写方法