前言:本文详细整理了python字符串格式化的几种方式。
一、使用 % 符号来进行格式化
格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下:
%s 字符串 (采用str()的显示)
%r 字符串 (采用repr()的显示)
%c 单个字符
%b 二进制整数
%d 十进制整数
%i 十进制整数
%o 八进制整数
%x 十六进制整数
%e 指数 (基底写为e)
%E 指数 (基底写为E)
%f 浮点数
%F 浮点数,与上相同
%g 指数(e)或浮点数 (根据显示长度)
%G 指数(E)或浮点数 (根据显示长度)
%% 字符”%”,显示百分号%
另外,比如我要固定字符的宽度,小数精度等,可以用如下的方式,对格式进行进一步的控制:
%[(name)][flags][width].[precision] typecode
(1)(name)为命名:即参数的名称,可以没有这个,怎么使用呢?注意(name需要使用括号括起来哦!!!)
# 注意:这里的name,num括号不能掉 'Hey %(name)s, there is a %(num)f number!' % {"name": name, "num": number }(2)flags可以有+,-,’ ‘或0。+表示右对齐。-表示左对齐。’ ‘为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0表示左侧使用0填充。
(3)width表示显示宽度
(4)precision表示小数点后精度
注意:百分号% 来格式化字符串是最早出现的,python里面称之为printf风格的字符串格式化,参考官方文档:
https://docs.python.org/zh-cn/3.7/library/stdtypes.html#old-string-formatting
二、使用.format的格式
字符串类型格式化采用format()方法,基本使用格式是:
<模板字符串>
.format(
<逗号分隔的参数>
)
逗号分隔的参数>
模板字符串>
2. 1 格式控制信息
format()方法中
<模板字符串>
的槽除了包括参数序号,还可以包括格式控制信息。此时,槽的内部样式如下:
模板字符串>
{
<参数序号>
:
<格式控制标记>
} # 中间使用了一个冒号哦!
格式控制标记>
参数序号>
其中,
<格式控制标记>
用来控制参数显示时的格式,包括:
<填充>
<对齐>
<宽度>
<,><.精度>
<类型>
6 个字段
类型>
宽度>
对齐>
填充>,这些字段都是可选的,可以组合使用,逐一介绍如下。
格式控制标记>

(1)
<填充>填充>
指
<宽度>
内除了参数外的字符采用什么方式表示,默认采用空格,可以通过
<填充>
更换。
填充>
宽度>
(2)
<对齐>对齐>
指参数在
<宽度>
内输出时的对齐方式,分别使用<、>和^三个符号表示左对齐、右对齐和居中对齐。
宽度>
(3)
<宽度>宽度>
指当前槽的设定输出字符宽度,如果该槽对应的format()参数长度比
<宽度>
设定值大,则使用参数实际长度。如果该值的实际位数小于指定宽度,则位数将被默认以空格字符补充。
宽度>
s = "PYTHON" "{0:30}".format(s) Out[17]: 'PYTHON ' "{0:>30}".format(s) Out[18]: ' PYTHON' "{0:*^30}".format(s) Out[19]: 'PYTHON' "{0:-^30}".format(s) Out[20]: '------------PYTHON------------' "{0:3}".format(s) Out[21]: 'PYTHON'
(4)逗号(,)
<格式控制标记>
中逗号(,)用于显示数字的千位分隔符,例如:
格式控制标记>
"{0:-^20,}".format() Out[24]: '---1,234,567,890----' "{0:-^20}".format() #对比输出 Out[25]: '----------' "{0:-^20,}".format(12345.67890) Out[26]: '----12,345.6789-----'
"{0:.2f}".format(12345.67890) Out[29]: '12345.68' "{0:H^20.3f}".format(12345.67890) Out[30]: 'HHHHH12345.679HHHHHH' "{0:.4}".format("PYTHON") Out[31]: 'PYTH'
(6)
<类型>类型>
表示输出整数和浮点数类型的格式规则。对于整数类型,输出格式包括6 种:
"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425) Out[32]: ',Ʃ,425,651,1a9,1A9'
"{0:e},{0:E},{0:f},{0:%}".format(3.14) Out[33]: '3.e+00,3.E+00,3.,314.000000%' "{0:.2e},{0:.2E},{0:.2f},{0:.2%}".format(3.14) Out[34]: '3.14e+00,3.14E+00,3.14,314.00%'
三、f-string来格式化字符串——python3.6以上
f-string采用 {content:format} 设置字符串格式,其中 content 是替换并填入字符串的内容,可以是变量、表达式或函数等,format 是格式描述符。采用默认格式时不必指定 {:format},如上面例子所示只写 {content} 即可。
关于格式描述符的详细语法及含义可查阅Python官方文档,这里按使用时的先后顺序简要介绍常用格式描述符的含义与作用:
关于这个format的格式,我们依然使用前面的方法二种format来格式化字符串的顺序来说明,也是按照下面这6个主要方面:
<填充>
<对齐>
<宽度>
<,><.精度>
<类型>
6 个字段,但是还有所拓展
类型>
宽度>
对齐>
填充>
format_spec 格式: [[fill]align][sign][#][0][width][grouping_option][.precision][type] 即format一般的格式为 [填充字符][对齐方式][数字的正负号显示][#][0][宽度][千分位分组符号][.小数精度][类型] (1)填充 fill : 可以是任何的字符 (2)对齐 align: "<" | ">" | "=" | "^" (3)符号 sign : 这个仅仅对数值有效 "+" | "-" | " " (4)宽度 width: 是一个整数数值,表示多少宽度 (5)grouping_option:表示千分位的分隔符号,可以是 "_" | "," (6)精度 precision : .数字 (7)类型 type : "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
下面是一些详细说明
(2)对齐align
| 对其align | 含义与作用 |
|---|---|
| < | 左对齐(字符串默认对齐方式) |
| > | 右对齐(数值默认对齐方式) |
| ^ | 居中 |
(3)符号sign
| 数字符号sign | 含义与作用 |
|---|---|
| + | 负数前加负号(-),正数前加正号(+) |
| – | 负数前加负号(-),正数前不加任何符号(默认) |
| (空格) | 负数前加负号(-),正数前加一个空格 |
注:仅适用于数值类型。
(4)# 符号说明
| # 描述符格式描述符 | 含义与作用 |
|---|---|
| # | 切换数字显示方式 |
注1:仅适用于数值类型。
注2:# 对不同数值类型的作用效果不同,详见下表:
| 数值类型 | 不加#(默认) |
加# |
区别 |
|---|---|---|---|
| 二进制整数 | '' |
'0b' |
开头是否显示 0b |
| 八进制整数 | '173' |
'0o173' |
开头是否显示 0o |
| 十进制整数 | '123' |
'123' |
无区别 |
| 十六进制整数(小写字母) | '7b' |
'0x7b' |
开头是否显示 0x |
| 十六进制整数(大写字母) | '7B' |
'0X7B' |
开头是否显示 0X |
(5)宽度与精度
宽度与精度相关格式描述符
| 格式描述符 | 含义与作用 |
|---|---|
width |
整数 width 指定宽度 |
0width |
整数 width 指定宽度,开头的 0 指定高位用 0 补足宽度 |
width.precision |
整数 width 指定宽度,整数 precision 指定显示精度 |
注1:0width 不可用于复数类型和非数值类型,width.precision 不可用于整数类型。
注2:width.precision 用于不同格式类型的浮点数、复数时的含义也不同:用于 f、F、e、E 和 % 时 precision 指定的是小数点后的位数,用于 g 和 G 时 precision 指定的是有效数字位数(小数点前位数+小数点后位数)。
注3:width.precision 除浮点数、复数外还可用于字符串,此时 precision 含义是只使用字符串中前 precision 位字符。
(6)千位分隔符相关格式描述符
| 格式描述符 | 含义与作用 |
|---|---|
| , | 使用,作为千位分隔符 |
| _ | 使用_作为千位分隔符 |
注1:若不指定 , 或 _,则f-string不使用任何千位分隔符,此为默认设置。
注2:, 仅适用于浮点数、复数与十进制整数:对于浮点数和复数,, 只分隔小数点前的数位。
注3:_ 适用于浮点数、复数与二、八、十、十六进制整数:对于浮点数和复数,_ 只分隔小数点前的数位;对于二、八、十六进制整数,固定从低位到高位每隔四位插入一个 _(十进制整数是每隔三位插入一个 _)。
(7)类型描述
| 格式描述符 | 含义与作用 | 适用变量类型 |
|---|---|---|
s |
普通字符串格式 | 字符串 |
b |
二进制整数格式 | 整数 |
c |
字符格式,按unicode编码将整数转换为对应字符 | 整数 |
d |
十进制整数格式 | 整数 |
o |
八进制整数格式 | 整数 |
x |
十六进制整数格式(小写字母) | 整数 |
X |
十六进制整数格式(大写字母) | 整数 |
e |
科学计数格式,以 e 表示 ×10^ |
浮点数、复数、整数(自动转换为浮点数) |
E |
与 e 等价,但以 E 表示 ×10^ |
浮点数、复数、整数(自动转换为浮点数) |
f |
定点数格式,默认精度(precision)是6 |
浮点数、复数、整数(自动转换为浮点数) |
F |
与 f 等价,但将 nan 和 inf 换成 NAN 和 INF |
浮点数、复数、整数(自动转换为浮点数) |
g |
通用格式,小数用 f,大数用 e |
浮点数、复数、整数(自动转换为浮点数) |
G |
与 G 等价,但小数用 F,大数用 E |
浮点数、复数、整数(自动转换为浮点数) |
% |
百分比格式,数字自动乘上100后按 f 格式排版,并加 % 后缀 |
浮点数、整数(自动转换为浮点数) |
常用的特殊格式类型:标准库 datetime 给定的用于排版时间信息的格式类型,适用于 date、datetime 和 time 对象
| 格式描述符 | 含义 | 显示样例 |
|---|---|---|
%a |
星期几(缩写) | 'Sun' |
%A |
星期几(全名) | 'Sunday' |
%w |
星期几(数字,0 是周日,6 是周六) |
'0' |
%u |
星期几(数字,1 是周一,7 是周日) |
'7' |
%d |
日(数字,以 0 补足两位) |
'07' |
%b |
月(缩写) | 'Aug' |
%B |
月(全名) | 'August' |
%m |
月(数字,以 0 补足两位) |
'08' |
%y |
年(后两位数字,以 0 补足两位) |
'14' |
%Y |
年(完整数字,不补零) | '2014' |
%H |
小时(24小时制,以 0 补足两位) |
'23' |
%I |
小时(12小时制,以 0 补足两位) |
'11' |
%p |
上午/下午 | 'PM' |
%M |
分钟(以 0 补足两位) |
'23' |
%S |
秒钟(以 0 补足两位) |
'56' |
%f |
微秒(以 0 补足六位) |
'' |
%z |
UTC偏移量(格式是 ±HHMM[SS],未指定时区则返回空字符串) |
'+1030' |
%Z |
时区名(未指定时区则返回空字符串) | 'EST' |
%j |
一年中的第几天(以 0 补足三位) |
'195' |
%U |
一年中的第几周(以全年首个周日后的星期为第0周,以 0 补足两位) |
'27' |
%w |
一年中的第几周(以全年首个周一后的星期为第0周,以 0 补足两位) |
'28' |
%V |
一年中的第几周(以全年首个包含1月4日的星期为第1周,以 0 补足两位) |
'28' |
四、字符串模板 string template
从简单的例子看起
>>> from string import Template >>> s = Template('$who likes $what') >>> s.substitute(who='tim', what='kung pao') 'tim likes kung pao' >>> d = dict(who='tim') >>> Template('Give $who $100').substitute(d) Traceback (most recent call last): ... ValueError: Invalid placeholder in string: line 1, col 11 >>> Template('$who likes $what').substitute(d) Traceback (most recent call last): ... KeyError: 'what' >>> Template('$who likes $what').safe_substitute(d) 'tim likes $what'
详细关于字符串模板的使用请参考官方文档:
https://docs.python.org/3/library/string.html
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205647.html原文链接:https://javaforall.net
