码迷,mamicode.com
首页 > 其他好文 > 详细

格式化输出%与format

时间:2018-09-20 16:06:15      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:一个   带编号   参数   百分号   col   特殊字符   port   保留   back   


一、%的用法

1.1整数输出

%o —— oct 八进制 ; %d —— dec 十进制 ; %x —— hex 十六进制

 

>>> print(%o % 20)
24
>>> print(%d % 20)
20
>>> print(%x % 20)
14

 

1.2浮点数输出

%f ——保留小数点后面六位有效数字 ; %.3f,保留3位小数位

%e ——保留小数点后面六位有效数字,指数形式输出;%.3e,保留3位小数位,使用科学计数法

%g ——在保证六位有效数字的前提下,使用小数方式,否则使用科学计数法  ; %.3g,保留3位有效数字,使用小数或科学计数法

技术分享图片
 >>> 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
View Code

1.3字符串输出

%s;%10s——右对齐,占位符10位;%-10s——左对齐,占位符10位;%.2s——截取2位字符串;%10.2s——10位占位符,截取两位字符串

技术分享图片
>>> 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   
View Code

1.4其他

1.4.1字符串格式代码

技术分享图片
 1 符号   说明
 2 %s    字符串
 3 %c    字符
 4 %d   十进制(整数)
 5 %i     整数
 6 %u    无符号整数
 7 %0    八进制整数
 8 %x    十六进制整数
 9 %X   十六进制整数大写
10 %e    浮点数格式1
11 %E    浮点数格式2
12 %f     浮点数格式3
13 %g    浮点数格式4
14 %G    浮点数格式5
15 %%   文字%
View Code

1.4.2常用转义字符

技术分享图片
 1 转义字符                  描述
 2 \(在行尾时               续行符
 3 \\                          反斜杠符号
 4  \                           单引号
 5  \ "                          双引号
 6 \a                             响铃
 7 \b                          退格(Backspace)
 8 \e                              |转义
 9 \00010 \n                              换行
11 \v                               纵向制表符
12 \t                                横向制表符
13 \r                               回车
14 \f                                 换页
15 \oyy                        八进制数yy代表的字符,例如:\\o12代表换行
16 \xyy                         十进制数yy代表的字符,例如:\\xOa代表换行
17 \other                        其它的字符以普通格式输出
View Code

二、format用法

相对基本格式化输出采用‘%’的方法,format()功能更强大,该函数把字符串当成一个模板,通过传入的参数进行格式化,并且使用大括号‘{}’作为特殊字符代替‘%’

2.1位置匹配

(1)不带编号,即“{}”

(2)带数字编号,可调换顺序,即“{1}”、“{2}”

(3)带关键字,即“{a}”、“{tom}”

技术分享图片
 1 >>> print({} {}.format(hello,world))  # 不带字段
 2 hello world
 3 >>> print({0} {1}.format(hello,world))  # 带数字编号
 4 hello world
 5 >>> print({0} {1} {0}.format(hello,world))  # 打乱顺序
 6 hello world hello
 7 >>> print({1} {1} {0}.format(hello,world))
 8 world world hello
 9 >>> print({a} {tom} {a}.format(tom=hello,a=world))  # 带关键字
10 world hello world
View Code

通过位置匹配对象

技术分享图片
 1 >>> {0}, {1}, {2}.format(a, b, c)
 2 a, b, c
 3 >>> {}, {}, {}.format(a, b, c)  # 3.1+版本支持
 4 a, b, c
 5 >>> {2}, {1}, {0}.format(a, b, c)
 6 c, b, a
 7 >>> {2}, {1}, {0}.format(*abc)  # 可打乱顺序
 8 c, b, a
 9 >>> {0}{1}{0}.format(abra, cad)  # 可重复
10 abracadabra
View Code

通过名字匹配对象

技术分享图片
1 >>> Coordinates: {latitude}, {longitude}.format(latitude=37.24N, longitude=-115.81W)
2 Coordinates: 37.24N, -115.81W
3 >>> coord = {latitude: 37.24N, longitude: -115.81W}
4 >>> Coordinates: {latitude}, {longitude}.format(**coord)
5 Coordinates: 37.24N, -115.81W
View Code

通过对象属性匹配对象

技术分享图片
 1 >>> c = 3-5j
 2 >>> (The complex number {0} is formed from the real part {0.real} 
 3 ...  and the imaginary part {0.imag}.).format(c)
 4 The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.
 5 >>> class Point:
 6 ...     def __init__(self, x, y):
 7 ...         self.x, self.y = x, y
 8 ...     def __str__(self):
 9 ...         return Point({self.x}, {self.y}).format(self=self)
10 ...
11 >>> str(Point(4, 2))
12 Point(4, 2)
View Code

通过下标或key匹配对象

技术分享图片
1 >>>
2 >>> coord = (3, 5)
3 >>> X: {0[0]};  Y: {0[1]}.format(coord)
4 X: 3;  Y: 5
5 >>> a = {a: test_a, b: test_b}
6 >>> X: {0[a]};  Y: {0[b]}.format(a)
7 X: test_a;  Y: test_b
View Code

格式转换

‘b‘ - 二进制。将数字以2为基数进行输出。

‘c‘ - 字符。在打印之前将整数转换成对应的Unicode字符串。

‘d‘ - 十进制整数。将数字以10为基数进行输出。

‘o‘ - 八进制。将数字以8为基数进行输出。

‘x‘ - 十六进制。将数字以16为基数进行输出,9以上的位数用小写字母。

‘e‘ - 幂符号。用科学计数法打印数字。用‘e‘表示幂。

‘g‘ - 一般格式。将数值以fixed-point格式输出。当数值特别大的时候,用幂形式打印。

‘n‘ - 数字。当值为整数时和‘d‘相同,值为浮点数时和‘g‘相同。不同的是它会根据区域设置插入数字分隔符。

‘%‘ - 百分数。将数值乘以100然后以fixed-point(‘f‘)格式打印,值后面会有一个百分号。

技术分享图片
 1 >>> print({0:b}.format(3))
 2 11
 3 >>> print({:c}.format(20))
 4 
 5 >>> print({:d}.format(20))
 6 20
 7 >>> print({:o}.format(20))
 8 24
 9 >>> print({:x}.format(20))
10 14
11 >>> print({:e}.format(20))
12 2.000000e+01
13 >>> print({:g}.format(20.1))
14 20.1
15 >>> print({:f}.format(20))
16 20.000000
17 >>> print({:n}.format(20))
18 20
19 >>> print({:%}.format(20))
20 2000.000000%
View Code

三、进阶用法

进制转换

技术分享图片
1 >>> # format also supports binary numbers
2 >>> "int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42)
3 int: 42;  hex: 2a;  oct: 52;  bin: 101010
4 >>> # with 0x, 0o, or 0b as prefix:
5 >>> "int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}".format(42)  # 在前面加“#”,则带进制前缀
6 int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010
View Code

左中右对齐及位数补全

(1)< (默认)左对齐、> 右对齐、^ 中间对齐、= (只用于数字)在小数点后进行补齐

(2)取位数“{:4s}”、"{:.2f}"等

技术分享图片
 1 >>> print({} and {}.format(hello,world))  # 默认左对齐
 2 hello and world
 3 >>> print({:10s} and {:>10s}.format(hello,world))  # 取10位左对齐,取10位右对齐
 4 hello      and      world
 5 >>> print({:^10s} and {:^10s}.format(hello,world))  # 取10位中间对齐
 6   hello    and   world   
 7 >>> print({} is {:.2f}.format(1.123,1.123))  # 取2位小数
 8 1.123 is 1.12
 9 >>> print({0} is {0:>10.2f}.format(1.123))  # 取2位小数,右对齐,取10位
10 1.123 is       1.12
11 
12 >>> {:<30}.format(left aligned)  # 左对齐
13 left aligned                  
14 >>> {:>30}.format(right aligned)  # 右对齐
15                  right aligned
16 >>> {:^30}.format(centered)  # 中间对齐
17            centered           
18 >>> {:*^30}.format(centered)  # 使用“*”填充
19 ***********centered***********
20 >>>{:0=30}.format(11)  # 还有“=”只能应用于数字,这种方法可用“>”代替
21 000000000000000000000000000011
View Code

正负符号显示

技术分享图片
1 >>> {:+f}; {:+f}.format(3.14, -3.14)  # 总是显示符号
2 +3.140000; -3.140000
3 >>> {: f}; {: f}.format(3.14, -3.14)  # 若是+数,则在前面留空格
4  3.140000; -3.140000
5 >>> {:-f}; {:-f}.format(3.14, -3.14)  # -数时显示-,与‘{:f}; {:f}‘一致
6 3.140000; -3.140000
View Code

百分数%

技术分享图片
1 >>> points = 19
2 >>> total = 22
3 >>> Correct answers: {:.2%}.format(points/total)
4 Correct answers: 86.36%
View Code

时间

技术分享图片
1 >>> import datetime
2 >>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
3 >>> {:%Y-%m-%d %H:%M:%S}.format(d)
4 2010-07-04 12:15:58
View Code

逗号","分隔金钱,没以前进位

技术分享图片
1 >>> {:,}.format(1234567890)
2 1,234,567,890
View Code

占位符嵌套

技术分享图片
 1 >>> for align, text in zip(<^>, [left, center, right]):
 2 ...     {0:{fill}{align}16}.format(text, fill=align, align=align)
 3 ...
 4 left<<<<<<<<<<<<
 5 ^^^^^center^^^^^
 6 >>>>>>>>>>>right 7 >>>
 8 >>> octets = [192, 168, 0, 1]
 9 >>> {:02X}{:02X}{:02X}{:02X}.format(*octets)
10 C0A80001
11 >>> int(_, 16)  # 官方文档给出来的,无法在IDLE复现
12 3232235521
13 >>>
14 >>> width = 5
15 >>> for num in range(5,12):
16 ...     for base in dXob:
17 ...         print({0:{width}{base}}.format(num, base=base, width=width), end= )
18 ...     print()
19 ...
20     5     5     5   101
21     6     6     6   110
22     7     7     7   111
23     8     8    10  1000
24     9     9    11  1001
25    10     A    12  1010
26    11     B    13  1011
View Code

占位符%s和%r

技术分享图片
1 """
2 replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
3 conversion ::= "r" | "s" | "a"
4 这里只有三个转换符号,用"!"开头。
5 "!r"对应 repr();"!s"对应 str(); "!a"对应ascii()。
6 """
7 
8 >>> "repr() shows quotes: {!r}; str() doesn‘t: {!s}".format(test1, test2)
9 "repr() shows quotes: ‘test1‘; str() doesn‘t: test2"  # 输出结果是一个带引号,一个不带
View Code

format变形用法

技术分享图片
 1 # a.format(b)
 2 >>> "{0} {1}".format("hello","world")
 3 hello world
 4 
 5 
 6 # f"xxxx"
 7 # 可在字符串前加f以达到格式化的目的,在{}里加入对象,此为format的另一种形式:
 8 
 9 >>> a = "hello"
10 >>> b = "world"
11 >>> f"{a} {b}"
12 hello world
13 
14 
15 
16 name = jack
17 age = 18
18 sex = man
19 job = "IT"
20 salary = 9999.99
21 
22 print(fmy name is {name.capitalize()}.)
23 print(fI am {age:*^10} years old.)
24 print(fI am a {sex})
25 print(fMy salary is {salary:10.3f})
26 
27 # 结果
28 my name is Jack.
29 I am ****18**** years old.
30 I am a man
31 My salary is   9999.990
View Code

 

 

格式化输出%与format

标签:一个   带编号   参数   百分号   col   特殊字符   port   保留   back   

原文地址:https://www.cnblogs.com/596014054-yangdongsheng/p/9680903.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!