字符串格式化

1、字符串格式化符号
 1 #字符串格式化使用操作符百分号(%)实现。(%也可以用作模运(求余)操作符)
 2 #示例如下:
 3 >>> print('hello,%s'%'world')
 4 hello,world
 5 >>> print('铿锵工作室,%s'%'吃喝嫖赌')
 6 铿锵工作室,吃喝嫖赌
 7 >>> print('袁威最喜欢%s的了'%'看球赛')
 8 袁威最喜欢看球赛的了
 9 >>> print('2*%s=10'%'5')
10 2*5=10
11 #由上面的输入的内容可知,%左边放置了一个格式化的字符串,右边放置的是希望格式化的值,格式化的值可以是一个字符串或数字。
12 #格式化字符串的%s部分称为转换说明符,标记了需要放置转换值的位置,通用术语为占位符,可以想象成在学校自习,我们通常会放一个物品在一个位置上,其他人一看就知道这个位置被占了,而我们无论什么时候去自习,直接到自己占好的位置坐下即可,这里可以把%s当作我们使用的物品,我们相当于后面%右边的值。
13 #在上面的示例中,s表示百分号右边的值会被格式化为字符串,s指的是str。如果不是字符串,就会使用str将其字符串。示例中就将5转换为字符串了,这种方式对大多数数值都有效。更多的格式化符号:
 
符号
描述
符号
描述
%c
格式化字符及其ASCII码
%f
格式化浮点数字,可指定精度值
%s
格式化字符串
%e
用科学计数法格式化浮点数
%d
格式化整数
%E
作用同%e,用科学计数法格式化浮点数
%u
格式化无符号整型
%g
%f和%e的简写
%o
格式化无符号八进制数
%G
%f和%E的简写
%x
格式化无符号十六进制数
%p
用十六进制格式化变量的地址
%X
格式化无符号十六进制数(大写)
   

>>> print('2017%x'%2017)
20177e1
>>> print('2017%d'%2017)
20172017
#如果要格式化实数(浮点数),就可以使用%f进行格式化,例如:
>>> print('圆周率PI的值为:%f'%3.14)
圆周率PI的值为:3.140000
#根据表可知,%f可以指定精度值,使用%f时,若不指定精度,默认输出6位小数。
#以指定3位小数为例,指定格式如下:
%.3f
#指定精度的格式位一个英文格式的句点加上希望保留的小数位数,因为格式化说明符以表示类型的字符结束,所以精度应该放在类型字符前面。示例如下:
>>> print('圆周率PI的值位:%.2f'%3.14)
圆周率PI的值位:3.14
#输出结果正是我们希望得到的。
#假如我们要输出类似4.56%这样的结果,直接使用加号加一个百分号可以吗?示例如下:
>>> print('明天下雨的概率为:%.2f'%4.56%)
SyntaxError: invalid syntax       #语法错误
>>> print('明天下雨的概率为:%.2f'%4.56+%)
SyntaxError: invalid syntax    
>>> print('明天下雨的概率为:%.2f'%4.56+'%')
明天下雨的概率为:4.56%
#输出结果是我们想要的,但是还有没有别的方法呢?
>>> print('明天下雨的概率为:%.2f%%'%4.56)
明天下雨的概率为:4.56%
#用这种方式也得到了我们想要的结果。不过我们在f字符后面使用了两个%,结果只输出了一个。
#在Python中,字符串中的百分号是转换说明符,如果要输出%,就需要格式化字符%,从而需要使用%%。使用这种方式操作的功能类似:
>>> print('输出百分号:%s'%'%')
输出百分号:%
2、字符串格式化元组

#格式化操作的右操作数可以是任何元素。
>>> print('今年是%s年,袁威在%s的群聊里,同时也在%s的群聊里'%(2017,'铿锵工作室','游江野雾'))
今年是2017年,袁威在铿锵工作室的群聊里,同时也在游江野雾的群聊里
>>> print('今年是%s年,袁威在%s的群聊里,同时也在%s的群聊里'%('2017','合水班车','索索里'))
今年是2017年,袁威在合水班车的群聊里,同时也在索索里的群聊里
>>> print('今年是%s年,袁威在%s的群聊里,同时也在%s的群聊里'%'2017','合水班车','索索里')
Traceback (most recent call last):
  File "<pyshell#35>", line 1, in <module>
    print('今年是%s年,袁威在%s的群聊里,同时也在%s的群聊里'%'2017','合水班车','索索里')
TypeError: not enough arguments for format string    #没有足够的参数用于格式化字符串
#由以上输出结果看到,在有多个占位符的字符串中,可以使用元组传入多个格式化值。如果需要转换的元组作为转换表达式的一部分存在,就必须将它用圆括号起来,否则会出错。
#如果使用列表或其他序列代替元组,序列就会被解释为一个值,只有元组和字典可以格式化一个以上的值。

#下面介绍基本转换说明符。注意,这些项的顺序至关重要。
①、%字符,标记转换说明符开始。
②、转换标志(可选):-表示对齐;+表示在转换值之前要加上正负号;“”(空白字符)表示正数之前保留空格;0表示转换值位数不够用时用0填充。
③、最小字段宽度(可选),转换后的字符串至少应该具有该值指定的宽度。如果时*,宽度就会从值元组中读出。
④、点(.)后跟精度值(可选),如果转换的是实数,精度值表示出现在小数点的位数;如果转换的是字符串,该数字就表示最大字段宽度;如果是*,精度就会从元组中读出。
⑤、转换类型,可见上面表格。
#接下来是详细讨论上述5个注意项。
(1)、简单转换
例:
>>> print('明天下雨的概率为:%.2f'%4.56)
明天下雨的概率为:4.56
>>> print('猪肉价格为每斤:¥%d'%10.8)
猪肉价格为每斤:¥10
#由上面的输出结果可以看到,简单转换只需要写出转换类型,使用比较简单。

(2)、字段宽度和精度
#转换说明符包括字段宽度和精度。字段宽度是转换后的值所保留的最小字符个数,精度是数字转换结果中应该包含的小数位数或字符串转换后的值所能包含的最大字符个数。
例:
>>> print('圆周率PI值为:%10f'%3.141593)   #字段宽度为10
圆周率PI值为:  3.141593       #字符串宽度为10,被字符串占据8个空格,剩余两个空格
>>> print('保留两位小数,圆周率PI的值为:%10.2f'%3.141593)   #字段宽度为10,保留两位小数
保留两位小数,圆周率PI的值为:      3.14   #字符串宽度为10,字符串占据4个,剩6个
>>> print('保留两位小数,圆周率PI的值为:%.2f'%3.141593)    #保留两位小数
保留两位小数,圆周率PI的值为:3.14       #输出没有字段宽度
>>> print('获取前五个字符串:%.5s'%('hello wordl'))     #打印字符串前5个字符
获取前五个字符串:hello       
#由输出结果可知,字段宽度和精度值都是整数,并通过点号(.)分隔。两个都是可选参数,如果给出精度,就必须前面要有点号。
#再如下例:
>>> print('从元组中获取字段宽度和精度值:%*.*f'%(10,5,'hello world'))
Traceback (most recent call last):
  File "<pyshell#48>", line 1, in <module>
    print('从元组中获取字段宽度和精度值:%*.*f'%(10,5,'hello world'))
TypeError: must be real number, not str
>>> print('从元组中获取字段宽度和精度值:%*.*s'%(10,5,'hello world'))    #输出字符串宽度为10,精度为5
从元组中获取字段宽度和精度值:     hello
>>> print('从元组中获取精度值:%.*s'%(5,'hello world'))   #输出精度值为5
从元组中获取精度值:hello
>>> print('从元组中获取精度值:%.*f'%(5,'hello world'))
SyntaxError: invalid character in identifier
#由输出结果看到,可以使用*(星号)作为字段宽度或精度(或两者都用*),数值会从元组中读出。

(3)、符号、对齐和0填充
#如例:
>>> print('圆周率PI的值为:%010.2f'%3.141593)    #字段宽度为10,精度为2
圆周率PI的值为:0000003.14
这个我们称之为“标表”。在字段宽度和精度之前可以放置一个“标表”,可以是零、加号、减号或者空格。零表示用0进行填充。
>>> print('圆周率PI的值为:%-10.2f'%3.141593)
圆周率PI的值为:3.14      #此处右侧为多出的空格
#减号(-)用来对齐数值。
#从输出结果看到,使用减号时,数字右侧多出了额外的空格。
#空白(“ ”)表示在正数前加上空格
>>> print((' %5d'%10)+'
'+('%5d'%-10))
    10
  -10
#由输出结果可以看到,该操作可以用于对齐正负数。
#加号(+)表示无论是正数还是负数都表示出符号,例如:
>>> print(('宽度前加加号:%+5d'%10)+'
'+('宽度前加加号:%+5d'%-10))
宽度前加加号:  +10
宽度前加加号:  -10
#该操作也可以用于数值的对齐。
原文地址:https://www.cnblogs.com/DLHe/p/7723120.html