字符串格式化

在编写程序时,您经常需要动态输出字符串。例如,我们使用一个程序来计算计算机的内存利用率,然后输出

[En]

In writing programs, you often need to output strings dynamically. For example, we use a program to calculate the memory utilization of the computer, and then output

10:15 计算机的内存利用率为30%

带下划线部分的内容会动态调整,需要根据执行结果进行填充,最终形成上述格式的字符串输出。

[En]

The content of the underlined part will be adjusted dynamically, which needs to be filled according to the execution result, and finally forms the string output of the above format.

这种功能就需要使用到字符串格式化操作,python中支持三种形式的字符串格式化:

% 字符串格式化

%字符串格式化继承自C语言,其语法为:

格式字符串 % (值1,值2,...)

其中格式字符串中会使用 %类型符号作为需要被替换的槽位。例如:

>>> '%s计算机的内存利用率为%s%%' % ('11:15',75)
'11:15计算机的内存利用率为75%'

字符串 '11.15'会替换格式字符串中的第一个槽位 %s,整数 75会替换格式字符串中的第二个槽位 %s,因为 %是槽位标志,如果要输出 %本身需要通过它自己进行转义,所以格式字符串中最后是 %%,会输出 %

请注意,要替换的值与格式字符串中的槽数逐一对应。或多或少将报告错误。

[En]

Note that the value to be replaced corresponds to the number of slots in the format string one by one. More or less will report an error.

你以为这就完了吗?

槽位的完整格式为:

%[(name)][flags][width][.precision]typecode

可以实现许多强大的功能,具体选项和功能如下:

[En]

Many powerful features can be implemented, and the specific options and features are as follows:

  • (name) 可选,用于选择指定的 key
  • flags 可选,可供选择的值有,注意只有在和数值类型的 typecode配合才起作用
  • +, 右对齐,正数前加正号,负数前加负号
  • -, 左对齐,正数前无符号,负数前加负号
  • 空格, 右对齐,正数前加空格,负数前加负号
  • 0, 右对齐,正数前无符号,复数前加负号;用 0填充空白处
  • width,可选字符串输出宽度
  • .precision 可选,小数点后保留位数,注意只有在和数值类型的 typecode配合才起作用
  • typecode必选
  • s,获取传入对象的字符串形式,并将其格式化到指定位置
  • r,获取传入对象的 __repr__方法的返回值,并将其格式化到指定位置
  • c,整数:将数字转换成其unicode对应的值,10进制范围为 0

不是看着头皮发麻,不用背,常用的功能只有几个,练习几次自然就会记住。

[En]

Is not looking at the scalp numb, do not have to memorize, commonly used functions are just a few, practice a few times will naturally remember.

一般情况下 %运算符后面的值与槽位按位置一一对应,但如果 %运算符后面接字典数据类型时,就需要通过 (name)进行指定:

>>> %(time)s计算机的内存利用率为%(percent)s%%' % {'time':'11:15', 'percent': 75}
'11:15计算机的内存利用率为75%'

对齐选项 flags和宽度选项 width,以及数字类型 d配合使用,可以输出固定格式的数字。例如,输出两位数的月份

>>> '%02d' % 8
'08'
>>> '%02d' % 9
'09'
>>> '%02d' % 10
10

格式字符串中的 0表示右对齐,正数前无符号,复数前加负号,用 0填充空白处,

2表示宽度,所以个位数的月份的左边会多一位空白位,并会被填充为0。

选项 .precison和浮点数类型配合使用可以格式化指定数量的小数位。

>>> '%.2f' % 75.125
'75.12'

不同进制的格式化

>>> '字符串%(key)s,十进制%(key)d,科学计数%(key)e,八进制%(key)o,16进制%(key)x,unicode字符%(key)c' % {'key': 65}
'字符串65,十进制65,科学计数6.500000e+01,八进制101,16进制41,unicode字符A'

format 方法格式化

python中给字符串对象提供了一个 format方法进行字符串格式化,功能比百分号格式化更强大,并且大力推荐,所以我们要首选使用。

其语法为:

格式字符串.format(参数)

在格式字符串中使用 {}代替 %类型符号作为槽位。

>>> '{}计算机的内存利用率为{}%'.format('11:15', 75)
'11:15计算机的内存利用率为75%'

默认情况下, format中的位置参数会按照位置与格式字符串中的槽位一一对应。

format中的参数使用位置参数时, {}中可以填写参数的整数索引和参数一一对应。

>>> '{2}{0}{1}'.format(1,2,3)
'312'

format中的参数以关键字参数提供时, {}中需要填写参数名和参数进行对应。

>>> '{time}计算机的内存利用率为{percent}%'.format(time='11:15', percent=75)
'11:15计算机的内存利用率为75%'

{}中除了填写参数索引或参数名外,还可以填写控制信息来实现更多的格式化功能,语法如下:

{参数名或索引:格式控制标记}

格式控制标记的语法如下:

[En]

The syntax of the format control tag is as follows:

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

选项功能如下:

  • fill 【可选】空白处填充的字符
  • align 【可选】对齐方式(需配合width使用)
    *
  • sign 【可选】有无符号数字
  • +,正号加正,负号加负;
  • -,正号不变,负号加负;
  • 空格 ,正号空格,负号加负;
  • 【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示

  • , 【可选】为数字添加分隔符,如:1,000,000
  • width 【可选】格式化位所占宽度
  • .precision 【可选】小数位保留精度
  • type 【可选】格式化类型
  • 传入” 字符串类型 “的参数
    • s,格式化字符串类型数据
    • 空白,未指定类型,则默认是None,同s
  • 传入” 整数类型 “的参数
    • b,将10进制整数自动转换成2进制表示然后格式化
    • c,将10进制整数自动转换为其对应的unicode字符
    • d,十进制整数
    • o,将10进制整数自动转换成8进制表示然后格式化;
    • x,将10进制整数自动转换成16进制表示然后格式化(小写x)
    • X,将10进制整数自动转换成16进制表示然后格式化(大写X)
  • 传入” 浮点型或小数类型 “的参数
    • e, 转换为科学计数法(小写e)表示,然后格式化;
    • E, 转换为科学计数法(大写E)表示,然后格式化;
    • f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
    • F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
    • g, 自动在e和f中切换
    • G, 自动在E和F中切换
    • %,显示百分比(默认显示小数点后6位)

输出两位数的月份

>>> '{:0>2}'.format(8)
'08'

其中 0表示要填充的符号, >表示右对齐, 2表示宽度。

保留两位小数

>>> '{:.2f}'.format(0.75123)
'0.7512'

百分比格式化

>>> '{:.2%}'.format(0.75123)
'75.12%'

各种进制格式化

>>> '字符串{key},十进制{key:d},科学计数{key:e},八进制{key:o},16进制{key:x},unicode字符{key:c}'.format(key=65)
'字符串65,十进制65,科学计数6.500000e+01,八进制101,16进制41,unicode字符A'

f 表达式

3.6版新功能:

格式字符串字面值或这位 f-string是标注了 fF前缀的字符串字面值。这是官方文档的中文翻译。我把这种方式的格式化叫做 f表达式,它比 format方法更加的灵活。它的基本语法是:

f'{控制选项}'

其控制选项和 format方法中的一致。

f字符串的槽位部分直接写变量名,解释器会自动讲变量的值的字符串形式替换。

>>> item = '11:15'
>>> percent = 75
>>> f'{time}计算机的内存利用率为{percent}'
'11:15计算机的内存利用率为75%'

格式输出两位数的月份

>>> month = 8
>>> f'{month:0>2}'
'08'

保留两位小数

>>> time = '11:15'
>>> percent = 0.75123
>>> f'{time}计算机的内存利用率为{percent:.2%}'
'11:15计算机的内存利用率为75.12%'

进制格式化

>>> key = 65
>>> f'字符串{key},十进制{key:d},科学计数{key:e},八进制{key:#o},16进制{key:x},unicode字符{key:c}'
'字符串65,十进制65,科学计数6.500000e+01,八进制0o101,16进制41,unicode字符A'

包含计算表达式的 f字符串

>>> num = -1
>>> f'{num+1=}'
'num+1=0'
>>> f'{num+2}'
'1'
>>> s = 'abcd'
>>> f'{s[::-1]=}'
"s[::-1]='dcba'"

包含函数的 f字符串

>>> num = -1
>>> f'{abs(num)=}'
'abs(num)=1'
>>> f'{abs(num)}'
'1'

Original: https://www.cnblogs.com/superwuchaofan/p/16562480.html
Author: python心蓝
Title: 字符串格式化

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/498733/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球