添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
细心的绿豆  ·  destring — ...·  3 月前    · 
爱搭讪的大蒜  ·  如何在EXCEL ...·  3 周前    · 
潇洒的西瓜  ·  Lambda--Optional、Colle ...·  1 年前    · 
任性的铅笔  ·  react.js - ...·  1 年前    · 
阳光的胡萝卜  ·  flutter - Your ...·  1 年前    · 

format() 函数的主要作用是按照指定的规则对字符串进行格式化,可以替换固定位置的内容,也可以对字符串填充对齐、数字的格式处理等等。虽然看上去它只是一个简单的数据替换以及数据格式化,但是它真的不简单,它拥有非常多的功能,有负责的内容替换的,有负责数据转换的,还有负责数据格式化的,每个功能都有很多选项,接下来逐一讲解。
它是Python的内置函数,在python文件中直接可以使用。

str.format(**args)

字符串中包含由大括号{}包围的"替换字段",其中大括号中填写文本替换以及格式化规则,如果不填写规则(使用{}),则视为文本格式并且不对文本进行任何格式化,直接替换。文本也是比较常用的一种形式。
完整的格式如下:

{[field_name][!conversion][:format_spec]}

field_name - 替换命名方式

可以使用默认值、对象名称、对象属性名称、对象索引等的方式来指定需要替换内容。它是可选的,不填写按顺序替换内容。

命名方式含义示例 不填写不填写的情况下将按照顺序替换内容,在提供替换值时需要注意先后顺序,下面几种方式不受顺序控制。{} arg_name直接使用对象的值{name} arg_name.attribute_name获取对象的指定属性的值{name.first} arg_name[element_index]获取对象的指定索引,可以是数字索引,也可以是字符串索引{name[0]} 或 {name['first']}

!conversion - 转换规则

替换后可以对替换的值使用转换函数进行直接转换,目前允许使用的转换函数有:str(),repr(),ascii(),在使用时需要书写它们对应的缩写,并以感叹号(!)开始。它是可选的,不填写就不转换。

选项含义示例 'r'调用repr()函数对值进行转换{!r} 's'调用str()函数对值进行转换{!s} 'a'调用ascii()函数对值进行转换{!a}

:format_spec - 格式化规则

在值被替换以及转换(如果设置的话)后还可以对值进行格式化,接下来将介绍各种格式化规则的用法。它是可选的,不填写就不格式化值。
需要说明一下:在下面的示例中会出现[format_spec]以及[!conversion],它们分别代表了文中提到的替换命名以及转换规则,由于它们是可选的,所有使用方括号括起来了,写在示例中只是为了体现他们的书写顺序,并不是一定存在。
格式化完整的参数如下:

[[fill]align][sign][#][0][width][grouping_option][.precision][type]

§ fill - 字符

任何字符,只能是一个字符。fill是可选的,但是如果设置了fill,就必须和align搭配使用。

§ align - 对齐方式
选项含义示例 '<'强制字符串在可用空间内左对齐(这是大多数对象的默认值)。{:<} '>'强制字符串在可用空间内右对齐(这是数字的默认值)。{:>} '='强制在符号(如果有)与数字之间填充若干指定字符,被允许的符号只有'+'、'-'、' ' ,此方式只能应用在值为数字的情况时。{:[x]=+} '^'强制字符串在可用空间内居中。{:^}

需要注意的是,如果没有设置填充宽度(width),宽度始终与填充它的数据大小相同,那么对齐选项就没有意义了。
另外,如果宽度设置的过小,比大部分数据的宽度都小。那么对齐的效果可能未必很好。
所以宽度最好设置的大于或等于数据的最大宽度,效果最佳。

§ sign - 符号
选项含义 '+'用于表示正数和负数 '-'用于表示仅用于负数(这是默认行为) space用于表示正数为空格,负数为减号
§ # - 数字的格式

'#'选项仅对integer,float,complex和Decimal类型有效。
对于二进制、八进制、十六进制的整数,会在数字的增加前缀"0b"、'0o'、'0x'。
对于浮点数、复数和十进制组成的小数(Decimal),转换后的结果始终都包含小数点字符。

§ 0 - 数字的对齐

这是一个特殊的对齐方式,当没有明确给出对齐方式时,则在width选项前面加'0'字符可以为数字类型是字符0进行填充。这相当于填充字符'0',对齐类型为'='。

§ width - 最小填充宽度

width是定义最小数据宽度的十进制整数。如果未指定,则数据宽度将由内容长度确定。

§ grouping_option - 千位分隔符
选项含义示例 ','使用逗号(,)对数字进行千位分割,每3位数字使用一次分隔符{:,} '_'使用下划线(_)对数字进行千位分割,没3位数字使用一次分隔符{:_}
§ .precision - 字符精度

表示在使用'f'和'F'格式化的浮点数的小数点后应显示多少位数。
表示在使用'g'和'G'格式化的浮点数的小数点前后(整数位+小数位)应显示多少位数。
对于非数字类型,限制其显示的字符最大长度。

§ type - 数据类型

类型确定了应该如何呈现数据,不同的数据需要使用不同的类型。

用于表示字符串类型:

类型含义 's'字符串格式,这是字符串的默认类型,可以省略。 None(不设置)和's'类型一样

用于表示整数类型:

类型含义 'b'将整数转换为二进制格式 'c'将整数转换为相应的unicode字符 'd'将整数转换为十进制格式 'o'将整数转换为八进制格式 'x'将整数转换为十六进制格式,以小写字母表示9以上的数字。 'X'将整数转换为十六进制格式,以大写字母表示9以上的数字。 'n'在一般情况下与'd'类型相同,但是在不同的语言环境可能显示不同,它会适当的插入数字分隔符。在中文语言环境是没有分隔符的。可以使用locale模块进行切换。 None和'd'类型一样

用于浮点和小数值类型:

类型含义 'e'将数字转换为以科学计数法表示的指数,默认精度为6。 'E'和'e'类型相同,只是它使用大写'E'作为分隔符。 'f'将固定保留小数点后6位,如果原数字小数点后位数超过6位且第7位大于5,则第6位+1,但第7位等于5时,则要看是否存在第8位且大于0,如大于0,第6位也+1,如果原数字小数点后不足6位的,则以0补充。如果指定了精度则按上述规则推算即可。 'F'与'f'类型相同,只是它会将nan转换为NAN,将inf转换为INF。 'g'一般格式,在未设置精度的情况下,它保留6位数(整数+小数),根据实际情况选择以固定位数或者科学计数法格式化结果,结果后面如果存在多余的0将会被舍去。有以及几种规则:如果整数位已经等于精度,则舍掉所有小数,并且以小数的第一位四舍五入进整数;如果整数位大于精度,则以exp指数的形式格式化,以精度位的下一位作为判断依据四舍五入;如果整数位不足精度位数,则使用小数位补充,不存在小数位或者整数位+小数位不足精度,则显示完整数字;如果整数位不足精度位数,且小数位大于剩余精度,则截取小数位剩余精度,以后一位小数为判断是否舍去还是进一,如后一位小数大于5,则进一,如后一小数小于5,则舍去,如后一位小数等于5且后二位小数大于0,则进一。 'G'与'g'类似一样,只是exp指数的'e'则会变为大写的'E',并且inf和nan也会变位INF和NAN。 'n'在一般情况下与'g'类型相同,但是在不同的语言环境可能显示不同,它会适当的插入数字分隔符。在中文语言环境是没有分隔符的。可以使用locale模块进行切换。 '%'在未指定精度的情况下,将数字乘以100,以'f'类型进行格式化,并在末尾加上百分号'%'。 None与'g'类型相似,只是在固定位数设置时,最少要有一位小数,否则会报错。
§ 实例1 - 替换命名
#不填写命名
>>> "{}, {}, {}".format('a', 'b', 'c')
'a, b, c'
#使用数字索引指定顺序
>>> "{0}, {1}, {2}".format('a', 'b', 'c')
'a, b, c'
>>> "{2}, {1}, {0}".format('a', 'b', 'c')
'c, b, a'
#使用变量名称
>>> day = 'Monday'
>>> month = 'February'
>>> "{month}, {day}".format(month = month, day = day)
'February, Monday'
#使用对象属性
>>> class date:
...     day = 'monday'
...     month = 'February'
>>> o = date()
>>> "{date.day}, {date.month}".format(date = o)
'monday, February'
#使用字典键名
date = {
    'day': 'Monday',
    'month': 'February'
"{date[day]}, {date[month]}".format(date = date)
§ 实例2 - 转换函数
#使用repr()函数转换值。
>>> "{!r}".format('abc')
"'abc'"
#使用ascii()函数转换值。
>>> "{!a}".format('测试')
"'\\u6d4b\\u8bd5'"
#使用str()函数转换值,返回str对象。
>>> "{!s}".format(123)
'123'
§ 实例3 - 格式化规则
>>> '{:<5}{:<5}{:<5}'.format(1,2,3) '1 2 3 ' >>> '{:>5}{:>5}{:>5}'.format(1,2,3) ' 1 2 3' #居中对齐 >>> '{:^5}{:^5}{:^5}'.format(1,2,3) ' 1 2 3 ' #默认空格填充,可以自定义 >>> '{:*^5}{:-^5}{:#^5}'.format('1','2','3') '**1**--2--##3##' #带符号使用0填充 >>> '{:0=+5}'.format(1) '+0001' >>> '{:0=+5}'.format(-1) '-0001' #千位分割 >>> "{:,}".format(123456789) '123,456,789' >>> "{:_}".format(123456789) '123_456_789' #属性0和width合用,相同于按照width宽度使用0填充。 >>> "{:07}".format(1) '0000001' #设置精度,整数+小数位。 >>> "{:.5}".format(12.3456789) '12.346' >>> "{:b}".format(30) '11110' >>> "{:o}".format(30) >>> "{:d}".format(30) #十六进制(e小写) >>> "{:x}".format(30) #十六进制(E小写) >>> "{:X}".format(30) #使用科学计数法 >>> "{:e}".format(123456) '1.234560e+05' #'E'大写 >>> "{:E}".format(123456) '1.234560E+05' #固定留小数点后6位,不足用0补充 >>> "{:f}".format(123.456) '123.456000' >>> "{:f}".format(123.4567890) '123.456789' #百分比 - 固定小数点留2位 >>> "{:.2%}".format(123.456789) '12345.68%'

如果有任何建议或意见,欢迎交流沟通

作者:张恺阳

本文链接:https://www.zky.name/article/35.html

来源:张恺阳博客