Python--字符串格式化
Posted mr-chenshuai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python--字符串格式化相关的知识,希望对你有一定的参考价值。
字符串:
所有标准序列操作(索引、切片、乘法、成员资格检查、长度、最小值和最大值)都适用于字符串,但别忘了字符串是不可变的,因此所有的元素赋值和切片赋值都是非法的。
字符串格式化:format方法
每个值都被插入字符串中,用来替用花括号括起来的替换字段
替换字段由下面的部分组成:
字段名:索引或者标识符,指出要设置哪个值的格式,并使用结果来替换该字段;还可以指定值的特殊部分,如列表内的元素
转换标志:跟在感叹号后面的单个字符。支持的字符包括:r(表示repr)、s(表示str)、a(表示ascii)。如果指定了转换标志,就不会用对象本身的格式,而是用指定函数将对象转换成字符串,然后进行格式设置
格式说明符:跟早冒号后面的表达式。让我们能详细的指定最终的格式,包括:格式类型、字段宽度、数的精度、如何显示符号、千位分隔符、各种对齐和填充方式
替换字段名:
向format提供要设置格式的未命名参数,并在格式字符串中使用,会按顺序将字段和参数配对
可以给参数指定名称,该参数会对应在格式字符中的字段
>>> "{foo}{}{bar}{}".format(1, 3, bar="a", foo=5) ‘51a3‘
可以通过索引来指定要在哪个字段中使用相应的未命名参数,这样就可以不按顺序使用未命名参数
>>> "{foo}{1}{bar}{0}".format(1, 3, bar="a", foo=5) ‘53a1‘
可以使用提供值中的一部分部分
>>> f = ["hello", "world"] >>> "hi {foo[1]}".format(foo=f) ‘hi world‘
可以使用句点来使用导入模块中的方法、属性、变量、函数(__name__获取指定模块的名称)
>>> import math >>> tmp = "The {mod.__name__} module defines the value {mod.pi} for π" >>> tmp.format( mod=math) ‘The math module defines the value 3.141592653589793 for π‘
基本转换:
使用转换标志设置值的格式
>>> print("{pi!s} {pi!r} {pi!a}".format(pi="π")) π ‘π‘ ‘u03c0‘ # s:str,将值创建为人易读的普通字符串 # r:repr,将值创建成给定的Python表达式 # a:ascii,创建ascii字符的表示
将要转换的值视为哪种类型,比如一个整数,但是要作为小数处理,就在冒号后面加上:f。要当做二进制处理就加上:b
>>> "This number is {num}".format(num=33) ‘This number is 33‘ >>> "This number is {num:f}".format(num=33) ‘This number is 33.000000‘ >>> "This number is {num:b}".format(num=33) ‘This number is 100001‘
在冒号(格式说明符)后面使用类型说明符,类型说明符有:
b # 将整数表示为二进制数 c # 将整数解读为Unicode码点 d #将整数视为十进制数进行处理,这是整数默认使用的说明符 e # 使用科学计数法来表示小数(e表示指数) E # 与e相同,但是使用E来表示指数 f # 将小数表示为定点小数 F # 与f相同,但是对于特殊值(nan和inf),使用大写表示 g #自动在定点表示和科学计数表示之间做出选择;这是默认用于小数的说明符,默认情况下至少有一位小数 G #与g相同,但使用大写来表示指数和特殊值 n # 与g相同,但插入随区域而异的数字分隔符 o # 将整数表示为八进制数 s # 保持字符串的格式不变,默认用于字符串的说明符 x # 将整数表示为十六进制数并使用小写字母 X # 与x相同,但使用大写字母 % # 将数表示为百分比值(乘以100,按说明符f设置格式,再在后面加上%)
宽度:
宽度使用整数指定
>>> "{num:10}".format(num=3) ‘ 3‘ >>> "{name:10}".format(name="bone") ‘bone ‘ # 可见数字是右对齐进行空位填充,字符串是左对齐进行填充
精度:
设置浮点数格式默认保留6位小数,要更改序要设置精度
精度使用整数指定,要在整数前面加上句点号:.
>>> "This number is {num:.2f}".format(num=33.345678) ‘This number is 33.35‘ # 可以同时指定宽度和精度 >>> "This number is {num:10.2f}".format(num=33.345678) ‘This number is 33.35‘
千位分隔符:
使用逗号添加
>>> "number is {:,}".format(10**100) ‘number is 10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000‘
同时指定其他格式设置时,逗号要放在表示宽度和表示精度的句点之间
"number is {:12.2f}".format(99999999) ‘number is 99999999.00‘ >>> "number is {:12,.2f}".format(99999999) ‘number is 99,999,999.00‘
对齐和填充:
字符串和数字默认的对齐方式不同,若要修改对齐方式,可以在指定宽度和精度的数前面添加一个标志
# 左对齐:< # 右对齐:> # 居中:^ >>> print("{0:<10.2f} {0:>10.2f} {0:^10.2f}".format(3.1415926)) 3.14 3.14 3.14
可以指定填充字符来替代默认的空格
>>> "{:#^16}".format("go") ‘#######go#######‘
等于号:=;用来将填充的字符放在符号和数字之间
>>> "{:=16.2f}".format(-3.1415) ‘- 3.14‘ >>> "{:#=16.2f}".format(-3.1415) ‘-###########3.14‘
给正数加上说明符,放在对齐说明符后面
# 默认设置,符号是:- >>> print("{0:.2} {1:.2}".format(3.1415, -3.1415)) 3.1 -3.1 >>> print("{0:-.2} {1:-.2}".format(3.1415, -3.1415)) 3.1 -3.1 # 改为+号 >>> print("{0:+.2} {1:+.2}".format(3.1415, -3.1415)) +3.1 -3.1 # 指定为空格 >>> print("{0: .2} {1: .2}".format(3.1415, -3.1415)) 3.1 -3.1
井号:#;将其放在符号说明符和宽度之间,将处罚一种转换方式,随类型而异
# 对于二进制、八进制、十六进制会加前缀 >>> "{:b}".format(42) ‘101010‘ >>> "{:#b}".format(42) ‘0b101010‘ # 对于十进制,必须包含小数点(g类型保留小数点后的0) >>> "{:g}".format(42) ‘42‘ >>> "{:#g}".format(42) ‘42.0000‘
以上是关于Python--字符串格式化的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 格式(f-string)字符串中,!r 是啥意思? [复制]