pythonstringformat
1. python字符串格式化什么意思
在python中也有类似于c中的printf()的格式输出标记。在python中格式化输出字符串使用的是%运算符,通用的形式为
格式标记字符串 % 要输出的值组
其中,左边部分的”格式标记字符串“可以完全和c中的一致。右边的'值组'如果有两个及以上的值则需要用小括号括起来,中间用短号隔开。重点来看左边的部分。左边部分的最简单形式为:
%cdoe
其中的code有多种,不过由于在python中,所有东西都可以转换成string类型,因此,如果没有什么特殊需求完全可以全部使用’%s‘来标记。比如:
'%s %s %s' % (1, 2.3, ['one', 'two', 'three'])
它的输出为'1 2.3 ['one', 'two', 'three']',就是按照%左边的标记输出的。虽然第一个和第二值不是string类型,一样没有问题。在这个过程中,当电脑发现第一个值不是%s时,会先调用整型数的函数,把第一个值也就是1转成string类型,然后再调用str()函数来输出。前面说过还有一个repr()函数,如果要用这个函数,可以用%r来标记。除了%s外,还有很多类似的code:
整型数:%d
无符号整型数:%u
八进制:%o
十六进制:%x %X
浮点数:%f
科学记数法: %e %E
根据数值的不同自动选择%e或%f: %g
根据数值的不同自动选择%E或%f: %G
就跟前面说用\进行转义一样,这里用%作为格式标记的标识,也有一个%本身应该如何输出的问题。如果要在”格式标记字符串“中输出%本身,可以用%%来表示。
上面说的只是格式标记的最简间的形式,来看复杂一点的:
‘%6.2f’ % 1.235
在这种形式中,在f的前面出现了一个类似小数的6.2它表示的意思是,总共输出的长度为6个字符,其中小数2位。还有更复杂的:
‘%06.2f’ % 1.235
在6的前面多了一个0,表示如果输出的位数不足6位就用0补足6位。这一行的输出为‘001.24’,可以看到小数也占用一位。类似于这里0这样的标记还有-、+。其中,-表示左对齐,+表示在正数前面也标上+号,默认是不加的。最后来看最复杂的形式:
‘%(name)s:%(score)06.1f’ %{'score':9.5, 'name':'newsim'}
这种形式只用在要输出的内容为dictionary(一种python的数据类型)时,小括号中的(name)和(score)对应于后面的键值对中的键。前面的例子可以看到,”格式标记字符串“中标记的顺序和"要输出的值组"中的值是一一对应的,有顺序,一对一,二对二。而在这种形式中,则不是,每个格式标记对应哪个值由小括号中的键来指定。这行代码的输出为:'newsim:0009.5'。
有时候在%6.2f这种形式中,6和2也不能事先指定,会在程序运行过程中再产生,那怎么输入呢,当然不能用%%d.%df或%d.%d%f。可以用%*.*f的形式,当然在后面的”要输出的值组“中包含那两个*的值。比如:'%*.*f' % (6, 2, 2.345)就相当于'%6.2f' % 2.345。
这是这本书到此为止看起来最复杂的内容。不过如果记不住,或不想那么耐烦,完全可以全部用%s代替,或者用多个"+"来构造类似的输出字符串。这里的%真有点除法的味道,怪不得设计者会选择用%这个除号。
象C 中的sprintf函数一样,可以用“%”来格式化字符串
Table 3.1. 字符串格式化代码
格式 描述
%% 百分号标记
%c 字符及其ASCII码
%s 字符串
%d 有符号整数(十进制)
%u 无符号整数(十进制)
%o 无符号整数(八进制)
%x 无符号整数(十六进制)
%X 无符号整数(十六进制大写字符)
%e 浮点数字(科学计数法)
%E 浮点数字(科学计数法,用E代替e)
%f 浮点数字(用小数点符号)
%g 浮点数字(根据值的大小采用%e或%f)
%G 浮点数字(类似于%g)
%p 指针(用十六进制打印值的内存地址)
%n 存储输出字符的数量放进参数列表的下一个变量中
2. string.format添加多个相同字符
string.format() 方法可以将多个值插手皮租入到指定的字符串中,可以按照指定的格式进行格式化输出。在字符串格式化的过程中,我们可以使用重复字符的方式来添加多个相同字符,使用重复字符的方式可以使代码更加简洁,提高代码的可读性。
具体地说,我们可以使用大括号{}来表示需要插入的值,然后在大括号中使用冒号:来毕兆指定格式化输出的方式。如果我们需要添加多个相同的字符,可以在冒号后面添加重握御复字符的符号,例如使用{:*^10}来表示需要在输出的字符串中添加10个*字符,且这些字符居中对齐。
拓展一下,除了使用重复字符的方式,我们还可以使用其他的字符串格式化方式来添加多个相同字符。例如,我们可以使用字符串乘法运算符*来实现添加多个相同字符的功能,例如使用'*' * 10来表示需要添加10个*字符。此外,在Python 3.6及以上版本中,我们还可以使用f-string的方式来进行字符串格式化,这种方式更加简洁方便,可以在字符串中直接插入变量,例如使用f'{"*" * 10}'来表示需要在字符串中添加10个*字符。
3. python中“format后的参数排列顺序必须按照格式字符串中槽{}的排列顺序依次一一对应”为什么错误谢谢
format函数实现字符串格式化的功能
基本语法为:
通过 : 和 {} 来控制字符串的操作
一、对字符串进行操作
1. 不设置指定位置,按默认顺序插入
①当参数个数等于{}个数的时候
str_1 = "小明{}小美,可是小美{}小明".format("喜欢", "不喜欢")
print(str_1)
运行结果:
②当参数个数大于{}个数的时候
str_1 = "小明{}小美,可是小美{}小明".format("喜欢", "不喜欢", "也不喜欢", "更不喜欢")
print(str_1)
运行结果:
③当参数个数习小于{}个数的时候
str_1 = "小明{}小美,可是小美{}小明".format("喜欢")
print(str_1)
运行结果:
程序会报错:越界
由此可以得出,当我们不指定参数位置的时候,format函数会帮我们按顺序将其接收到的参数,填入到{}中。
2. 设置指定位置
当format接收到的参数个数大于{}或者我们想将不同{}替换为相同字符串的时候,我们可以在{}内指定接收第几个参数。format接收的参数,从0开始。
str_1 = "小明{1}小美,可是小美{3}小明,小美{0}小明,小美{2}小华".format("不喜欢", "喜欢", "更喜欢", "很讨厌")
print(str_1)
在这一句代码中,分别为不同的{}指定了接收的参数位置。
运行结果:
很显然,如果我们的{}的个数小于format的参数也是OK的。
str_1 = "小明{1}小美,可是小美{3}小明,小美{2}小华".format("不喜欢", "喜欢", "更喜欢", "很讨厌")
print(str_1)
运行结果:
由此我们得出结论:
在使用format()函数的时候,我们给format()的个数是不限的,如果我们并没有在{}中指定位置,那么format()会自动按顺序将参数填入{},而如果我们为{}指定了位置,那么format()就会把指定位置的参数填入对应的{}中。
3.设置format()参数的值①直接在format()中进行赋值
str_1 = "博主:{name}, 博客地址:{url}".format(name="KaiSarH", url="https://blog.csdn.net/KaiSarH")
运行结果:
②通过传递多值参数向format传递参数进而对{}进行赋值
- 使用**传递字典。
在Python中,使用**可以传递一个字典参数,我们可以使用键名进行匹配,进而进行赋值
dict_1 = {"name": "KaiSarH",
"url": "https://blog.csdn.net/KaiSarH"}
str_2 = "博主:{name}, 博客地址:{url}".format(**dict_1)
运行结果:
我们向format()传递的字典参数,所包含的键值对,必须包含所有的{}名。只能多(正确),不能少(报错)。
dict_1 = {"name": "KaiSarH",
"url": "https://blog.csdn.net/KaiSarH",
"login": "login information"}
str_2 = "博主:{name}, 博客地址:{url}".format(**dict_1)
print(str_2)
dict_1 = {"name": "KaiSarH",
"key": "https://blog.csdn.net/KaiSarH",
"login": "login information"}
str_4 = "博主:{name}, 博客地址:{url}".format(**dict_1)
print(str_4)
运行结果:
注意:我们可以向format()中传递多个字典,但是不可以含有相同键。
dict_1 = {"name": "KaiSarH",
"url": "https://blog.csdn.net/KaiSarH",
"login": "login information"}
str_2 = "博主:{name}, 博客地址:{url}".format(**dict_1)
dict_2 = {"name": "KaiSarH",
"key": "https://blog.csdn.net/KaiSarH",
"login": "login information"}
str_4 = "博主:{name}, 博客地址:{url}".format(**dict_1, **dict_2)
print(str_4)
运行结果:
- 传递列表
list_1 = ["KaiSarH","https://blog.csdn.net/KaiSarH"]
str_3 = "博主:{0[0]}, 博客地址:{0[1]}".format(list_1)
运行结果:
除了传递一个列表,我们也可以向format()中传递多个列表,只需保证取值的时候无误就可以。
list_1 = ["ZhangSan","https://blog.csdn.net/KaiSarH"]
list_2 = ["KaiSarH", "http:www..com"]
str_3 = "博主:{1[0]}, 博客地址:{0[1]}".format(list_1, list_2)
运行结果:
③向format()中传入对象,进行赋值
与列表相同,我们同样可以向format()中传递多个对象,只要在赋值的之后做好对应就可以。
class Dog:
def __init__(self, name):
self.name = name
class Mouse:
def __init__(self, name):
self.name = name
tom = Dog("Tom")
jerry = Mouse("Jerry")
str_1 = "{0.name} want to eat {1.name}".format(tom, jerry)
print(str_1)
运行结果:
二、对数字进行格式化
对于数字的格式化,我们主要是在{}中进行设置格式化数字的多种方法
1.保留小数点后n位
格式:{:.nf}
print("{:.1f}".format(3.1415926535))
print("{:.3f}".format(3.1415926535))
print("{:.4f}".format(3.1415926535))
print("{:.6f}".format(3.1415926535))
运行结果:
2.带符号保留小数点后n位
格式:{:+.nf}
print("{:+.1f}".format(3.1415926535))
print("{:+.3f}".format(-3.1415926535))
print("{:+.4f}".format(3.1415926535))
print("{:+.6f}".format(-3.1415926535))
运行结果:
{:.nf}和 {:+.nf}的区别
负数无区别,整数有无符号。
print("{:.1f}".format(3.1415926535))
print("{:+.1f}".format(3.1415926535))
print("{:.3f}".format(-3.1415926535))
print("{:+.3f}".format(-3.1415926535))
print("{:.4f}".format(3.1415926535))
print("{:+.4f}".format(3.1415926535))
print("{:.7f}".format(-3.1415926535))
print("{:+.7f}".format(-3.1415926535))
运行结果:
3.不带小数(只保留整数)
格式:{:.0f}
print("{:.0f}".format(3.1415926535))
print("{:.0f}".format(-3.1415926535))
print("{:.0f}".format(3.8415926535))
运行结果:
4.如果整数的位数不足n位,在左边进行数字补零。如果已经够了n位,直接输出
格式:{:0>nd}
print("{:0>2d}".format(5))
print("{:0>3d}".format(5))
print("{:0>5d}".format(123456))
运行结果:
5.如果整数的位数不足n位,在右边进行x补充。如果已经够了n位,直接输出
格式:{:x<4d}
print("{:x<2d}".format(5))
print("{:x<3d}".format(5))
print("{:x<4d}".format(123456))
运行结果:
很显然,在补充操作中,我们既可以指定在哪一边补充,也可以指定补充的值为什么。
我们也可以利用print("{:x>.2f}".format(3.1))或者{:x<.2f>
6.以逗号分隔数字格式,每三位加入一个,
格式:{:,}
print("{:,}".format(314156926))
运行结果:
7.百分比格式(在我理解,就是把数字×100,保留两位数字,然后加一个百分号)
格式:{:.2%}
print("{:.2%}".format(0.27896))
运行结果:
8.指数记法
格式:{:.2e}
print("{:.2e}".format(100))
运行结果:
9.右对齐(默认宽度为10)
格式:{:>10d}
print("{:>10d}".format(100))
print("{:>10d}".format(2))
print("{:>10d}".format(12580))
运行结果:
10.左对齐(默认宽度为10)
格式:{:<10d}
print("{:<10d}".format(100))
print("{:<10d}".format(2))
print("{:<10d}".format(12580))
运行结果:
11.中间对齐(默认宽度为10)
格式:{:^10d}
print("{:^10d}".format(100))
print("{:^10d}".format(2))
print("{:^10d}".format(12580))
运行结果:
12.进制——b、d、o、x 分别是二进制、十进制、八进制、十六进制。
格式:
‘{:b}'.format(11)
‘{:d}'.format(11)
‘{:\o}'.format(11)
‘{:x}'.format(11)
‘{:#x}'.format(11)
‘{:#X}'.format(11)
print("{:b}".format(125))
print("{:d}".format(125))
print("{:o}".format(125))
print("{:x}".format(125))
print("{:#x}".format(125))
print("{:#X}".format(125))
运行结果:
4. python问题,用format函数来格式化字符串,如何设置宽度为变量
在{}里继续嵌套一次{},并在format的参数里增加一项即可。
b=10
print("{0:*^{width}}".format("字符串", width=b))
b=30
print("{0:*^{width}}".format("字符串", width=b))
最后得到的输出如下
***字符串****
*************字符串**************
5. python string函数
python string函数是什么?一起来看下吧:
python string函数包括:
1、str.capitalize:将原字符串内的首字母转成大写,其他部分小写,再返回新字符串
print("s.capitalize() = {function}" s.capitalize() = Abcada a
2、str.lower:将原字符串的字母转为小写
print("s.lower() = {function}".format(function = s.lower())) s.lower() = abcada a
3、str.upper:将原字符串的字母转为大写
print("s.upper() = {function}".format(function = s.upper())) s.upper() = ABCADA A
4、str.swapcase:将原字符串的大写小写反转
print("s.swapcase() = {function}".format(function = s.swapcase())) s.swapcase() = ABCAdA A
5、str.title:原字符串内如果有特殊字符(包括数字)连接字母,则将特殊字符后的首个英文字母转化为大写形态,并返回新字符串
print("s2.title() = {function}".format(function = s2.title())) s2.title() = 123A Abc Abcsaa S
6、str.center:str.center(宽度,填充字符) 将字符串以居中的格式返回,若宽度值比len(s)小则返回原字符串,填充以从左到右为规则,填充字符的默认值为空格,值可以自己更改
print("s2.center() = {function}".format(function = s2.center(19,'&'))) print("s2.center() = {function}".format(function = s2.center(20,'&'))) #s2 = 123a abc ABCSAa s s2.center() = &123a abc ABCSAa s s2.center() = &123a abc ABCSAa s &
7、str.expandtabs:str.expandtabs(tabsize = 8) 将原字符串中 以前的字符补满8位(默认),tabsize的值从0-7即8位,在0-7中任意取值则默认tabsize = 8,此后往上+1,就相当于增加一个空格
print("s3.expandtabs ={function}".format(function = s3.expandtabs())) print("s3.expandtabs ={function}".format(function = s3.expandtabs(0))) print("s3.expandtabs ={function}".format(function = s3.expandtabs(5))) print("s3.expandtabs ={function}".format(function = s3.expandtabs(8))) print("s3.expandtabs ={function}".format(function = s3.expandtabs(9)))#s3 = " as b123" s3.expandtabs = as b123 s3.expandtabs =as b123 s3.expandtabs = as b123 s3.expandtabs = as b123 s3.expandtabs = as
除了上述举例的,string函数还有许多实用的函数。
6. format在python中的含义
在Python中,format()是一个内置函数,用于将变量值格式化为字符串。该函数可以接受多个参数,其中第一个参数是字符串,包含一个或多个替换字段。替换字段由花括号括起来,其中可能包含一个或多个格式规范,用于指定如何格式化替换值。这些规范包括如何对数字进行舍入,如何格式化日期和时间等等。
Python的format()函数非常灵活,可以用于各种字符串格式化任务。例如,您可以使用它来创建自定乎唤义错误消息,生成包含数据的电子邮件,或将数据写入日志文件。此外,format()函数可以与其他Python字符串处理函数一起使用,例如join()和split(),以实现更复杂的字符串操作。
在Python的格式化字符串中,还可以使用占位符来指定要格式化的变量类型。例如,您可以使用%s占位符来格式化字符串,使用%d占位符来格式化整数,使用%f占位符来格式化浮点数等等。这些占位符可以与格式规范一起使用,以指定要显示的小数位数,岁伏凯对齐方式等其他细节。
总之,Python的format()函数是一个非常有用的工具厅猜,可以轻松地将变量值格式化为字符串,并将它们插入到其他字符串中。无论您是在编写简单的脚本还是复杂的应用程序,使用format()函数都可以使您的代码更加优雅和易于维护。
7. Python如何格式化输出字符串!
python一共有两种格式化输出语法,
一种是类似于C语言printf的方式,称为 Formatting Expression
>>>print '%s%d-%d'%('hello',7,1)
'hello7-1'
另一种是类似于C#的方式,称为String Formatting Method Calls
>>>print '{0}{1}:{2}'.format('hello','1','7')
'hello1:7'
第一种方式可以指定浮点数的精度,例如
>>> print'%.3f'%1.234567869
'1.235'
运行时动态指定浮点数的精度
但是当代码在运行中如何动态地通过参数来指定浮点数的精度呢?
python的神奇之处在于它又提供了一种非常方便的语法。只需要在 typecode(这里是f)之前加一个 *,浮点数的精度就用它前面的数字来指定。
>>>foriinrange(5):
... print'%.*f'%(i,1.234234234234234)
...
'1'
'1.2'
'1.23'
'1.234'
'1.2342'
通过输出结果可以看出,精度都是在运行时动态指定,这样就省去了格式化字符串的拼凑。
使用String Formatting Method Calls可以更简洁地完成功能。
>>>foriinrange(5):
... print'{0:.{1}f}'.format(1/3.0,i)
...
'0'
'0.3'
'0.33'
'0.333'
'0.3333'
附录是一些常用用法——
python print格式化输出。
1. 打印字符串
print ("His name is %s"%("Aviad"))
2.打印整数
print ("He is %d years old"%(25))
3.打印浮点数
print ("His height is %f m"%(1.83))
4.打印浮点数(指定保留小数点位数)
print ("His height is %.2f m"%(1.83))
5.指定占位符宽度
print ("Name:%10s Age:%8d Height:%8.2f"%("Aviad",25,1.83))
6.指定占位符宽度(左对齐)
print ("Name:%-10s Age:%-8d Height:%-8.2f"%("Aviad",25,1.83))
7.指定占位符(只能用0当占位符?)
print ("Name:%-10s Age:%08d Height:%08.2f"%("Aviad",25,1.83))
8.科学计数法
format(0.0015,'.2e')
8. python字符串格式化什么意思
python字符串格式化的意思就是用format函数格式化字符串的用法。
用法:它通过{}和:来代替传统%方式。
1、使用位置参数
要点:从以下例子可以看出位置参数不受顺序约束,且可以为{},只要format里有相对应的参数值即可,参数索引从0开,传入位置参数列表可用*列表
>>>li=['hoho',18]
>>>'mynameis{},age{}'.format('hoho',18)
'mynameishoho,age18'
>>>'mynameis{1},age{0}'.format(10,'hoho')
'mynameishoho,age10'
>>>'mynameis{1},age{0}{1}'.format(10,'hoho')
'mynameishoho,age10hoho'
>>>'mynameis{},age{}'.format(*li)
'mynameishoho,age18'
2、使用关键字参数
要点:关键字参数值要对得上,可用字典当关键字参数传入值,字典前加**即可
>>>hash={'name':'hoho','age':18}
>>>'mynameis{name},ageis{age}'.format(name='hoho',age=19)
'mynameishoho,ageis19'
>>>'mynameis{name},ageis{age}'.format(**hash)
'mynameishoho,ageis18'
3、填充与格式化
:[填充字符][对齐方式 <^>][宽度]
>>>'{0:*>10}'.format(10)##右对齐
'********10'
>>>'{0:*<10}'.format(10)##左对齐
'10********'
>>>'{0:*^10}'.format(10)##居中对齐
'****10****'
4、精度与进制
>>>'{0:.2f}'.format(1/3)
'0.33'
>>>'{0:b}'.format(10)#二进制
'1010'
>>>'{0:o}'.format(10)#八进制
'12'
>>>'{0:x}'.format(10)#16进制
'a'
>>>'{:,}'.format(12369132698)#千分位格式化
'12,369,132,698'
5、使用索引
>>>li
['hoho',18]
>>>'nameis{0[0]}ageis{0[1]}'.format(li)
'nameishohoageis18
9. Python 里的 String format问题, 我搞不懂这个东西到底是怎么用的。
举世余咐个例子好了:
'%-*s%*s' % (x, s1, y, s2)
s1左对齐打印,总共要占用x长度,不够的用空格补充,若字符串超出以字符串实际长度为准;
s2没有'-'即按照右对齐,同样方式打印。这里'*'你可以理解为对应x个数的空格占位符吧。
另外毁逗,format是保留字,对应header_format建议变搜纯量用content_format做变量命名;
打印水果价钱可以用字典,比较简洁:
d = {'Apple':0.4, 'Pears':0.5, 'Cantalopes':1.92, 'Dried Apricots(16)':8,'Prues':12}
for k in d.keys():
print content_format % (item_width, k, price_width, d[k])
10. python语言format用法
Format为CString类的一个成员函数,它通过格式操作使任意类型的数据转换成一个字符串Format里面可以写普通的字符串,比如“mynameis”,但有些格式指令字符具有特殊意义,比如“%6s”。
Format(<表达式>[,<格式字符串>])其中,<表达式>:要格式化的数值、日期或字符串表达式。<格式字符串>:指定表达式的值的输出格式。格式字符有三类:数值格式、日期格式和字符串格式。格式字符要加引号。
方法如下:
1、首先按下“Win+R”组合键,打开运行窗口。