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 是啥意思? [复制]

python颜色压缩的结果颜色比保存颜色深

我应该如何使用 Outlook 发送代码片段?

Python代码阅读(第25篇):将多行字符串拆分成列表

如何在 Javadoc 中使用 @ 和 符号格式化代码片段?

为 Blogger 上的博客格式化代码片段 [关闭]