python字符串格式化深入详解(四种方法)
机器学习与python集中营
共 5855字,需浏览 12分钟
·
2020-12-11 14:44
一、使用 % 符号来进行格式化
# 注意:这里的name,num括号不能掉
'Hey %(name)s, there is a %(num)f number!' % {"name": name, "num": number }
二、使用.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'
"{0:-^20,}".format(1234567890)
Out[24]: '---1,234,567,890----'
"{0:-^20}".format(1234567890) #对比输出
Out[25]: '-----1234567890-----'
"{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'
"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425)
Out[32]: '110101001,Ʃ,425,651,1a9,1A9'
"{0:e},{0:E},{0:f},{0:%}".format(3.14)
Out[33]: '3.140000e+00,3.140000E+00,3.140000,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以上
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" | "%"
对其align | 含义与作用 |
---|---|
< | 左对齐(字符串默认对齐方式) |
> | 右对齐(数值默认对齐方式) |
^ | 居中 |
数字符号sign | 含义与作用 |
---|---|
+ | 负数前加负号(-),正数前加正号(+) |
- | 负数前加负号(-),正数前不加任何符号(默认) |
(空格) | 负数前加负号(-),正数前加一个空格 |
# 描述符格式描述符 | 含义与作用 |
---|---|
# | 切换数字显示方式 |
数值类型 | 不加# (默认) | 加# | 区别 |
---|---|---|---|
二进制整数 | '1111011' | '0b1111011' | 开头是否显示 0b |
八进制整数 | '173' | '0o173' | 开头是否显示 0o |
十进制整数 | '123' | '123' | 无区别 |
十六进制整数(小写字母) | '7b' | '0x7b' | 开头是否显示 0x |
十六进制整数(大写字母) | '7B' | '0X7B' | 开头是否显示 0X |
格式描述符 | 含义与作用 |
---|---|
width | 整数 width 指定宽度 |
0width | 整数 width 指定宽度,开头的 0 指定高位用 0 补足宽度 |
width.precision | 整数 width 指定宽度,整数 precision 指定显示精度 |
格式描述符 | 含义与作用 |
---|---|
, | 使用,作为千位分隔符 |
_ | 使用_作为千位分隔符 |
格式描述符 | 含义与作用 | 适用变量类型 |
---|---|---|
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 格式排版,并加 % 后缀 | 浮点数、整数(自动转换为浮点数) |
格式描述符 | 含义 | 显示样例 |
---|---|---|
%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 补足六位) | '553777' |
%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'
评论