Python 格式化字符串
admin
2023-07-30 22:35:33
0

在编写程序的过程中,经常需要进行格式化输出,每次用每次查。干脆就在这里整理一下,以便索引。

 

格式化操作符(%)

“%”是Python风格的字符串格式化操作符,非常类似C语言里的printf()函数的字符串格式化(C语言中也是使用%)。

下面整理了一下Python中字符串格式化符合:

格式化符号 说明
%c 转换成字符(ASCII 码值,或者长度为一的字符串)
%r 优先用repr()函数进行字符串转换
%s 优先用str()函数进行字符串转换
%d / %i 转成有符号十进制数
%u 转成无符号十进制数
%o 转成无符号八进制数
%x / %X 转成无符号十六进制数(x / X 代表转换后的十六进制字符的大小写)
%e / %E 转成科学计数法(e / E控制输出e / E)
%f / %F 转成浮点数(小数部分自然截断)
%g / %G %e和%f / %E和%F 的简写
%% 输出% (格式化字符串里面包括百分号,那么必须使用%%)

这里列出的格式化符合都比较简单,唯一想要强调一下的就是”%s”和”%r”的差别。

看个简单的代码:

1234 string = \”Hello\\tWill\\n\” print \”%s\” %stringprint \”%r\” %string

代码的输出为:

其实,这里的差异是str()和repr()两个内建函数之间的差异:

  • str()得到的字符串是面向用户的,具有较好的可读性
  • repr()得到的字符串是面向机器的
    • 通常(不是所有)repr()得到的效果是:obj == eval(repr(obj))

 

格式化操作符辅助符

通过”%”可以进行字符串格式化,但是”%”经常会结合下面的辅助符一起使用。

辅助符号 说明
* 定义宽度或者小数点精度
用做左对齐
+ 在正数前面显示加号(+)
# 在八进制数前面显示零(0),在十六进制前面显示”0x”或者”0X”(取决于用的是”x”还是”X”)
0 显示的数字前面填充”0″而不是默认的空格
(var) 映射变量(通常用来处理字段类型的参数)
m.n m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

看一些简单的 例子:

1234567891011121314151617181920 num = 100 print \”%d to hex is %x\” %(num, num)print \”%d to hex is %X\” %(num, num)print \”%d to hex is %#x\” %(num, num)print \”%d to hex is %#X\” %(num, num)  # 浮点数f = 3.1415926print \”value of f is: %.4f\” %f # 指定宽度和对齐students = [{\”name\”:\”Wilber\”, \”age\”:27}, {\”name\”:\”Will\”, \”age\”:28}, {\”name\”:\”June\”, \”age\”:27}]print \”name: %10s, age: %10d\” %(students[0][\”name\”], students[0][\”age\”])print \”name: %-10s, age: %-10d\” %(students[1][\”name\”], students[1][\”age\”])print \”name: %*s, age: %0*d\” %(10, students[2][\”name\”], 10, students[2][\”age\”]) # dict参数for student in students:print \”%(name)s is %(age)d years old\” %student

代码输出为:

对于Python的格式化操作符,不仅可以接受tuple类型的参数,也可以支持dict,象上面代码的最后一部分,那么格式化字符串中就可以直接使用”%(key)s”(这里的s根据具体类型改变)的方式表示dict中对应的value了。

 

字符串模板

其实,在Python中进行字符串的格式化,除了格式化操作符,还可以使用string模块中的字符串模板(Template)对象。下面就主要看看Template对象的substitute()方法:

1234567891011 from string import Template s = Template(\”Hi, $name! $name is learning $language\”)print s.substitute(name=\”Wilber\”, language=\”Python\”) d = {\”name\”: \”Will\”, \”language\”: \”C#\”}print s.substitute(d) # 用??$??</span></div><div class=s = Template(\”This book ($bname) is 17\” />\”)print s.substitute(bname=\”TCP/IP\”)

代码结果为:

 

字符串内建函数format()

Python2.6开始,新增了一种格式化字符串的函数str.format(),通过这个函数同样可以对字符串进行格式化处理。在format()函数中,使用“{}”符号来当作格式化操作符。

下面直接通过一些简单的例子演示format()函数的基本使用:

12345678910111213141516171819202122232425262728293031323334串格式化(C语言中也是使用%)。

下面整理了一下Python中字符串格式化符合:

格式化符号 说明
%c 转换成字符(ASCII 码值,或者长度为一的字符串)
%r 优先用repr()函数进行字符串转换
%s 优先用str()函数进行字符串转换
%d / %i 转成有符号十进制数
%u 转成无符号十进制数
%o 转成无符号八进制数
%x / %X 转成无符号十六进制数(x / X 代表转换后的十六进制字符的大小写)
%e / %E 转成科学计数法(e / E控制输出e / E)
%f / %F 转成浮点数(小数部分自然截断)
%g / %G %e和%f / %E和%F 的简写
%% 输出% (格式化字符串里面包括百分号,那么必须使用%%)

这里列出的格式化符合都比较简单,唯一想要强调一下的就是”%s”和”%r”的差别。

看个简单的代码:

1234 string = \”Hello\\tWill\\n\” print \”%s\” %stringprint \”%r\” %string

代码的输出为:

其实,这里的差异是str()和repr()两个内建函数之间的差异:

  • str()得到的字符串是面向用户的,具有较好的可读性
  • repr()得到的字符串是面向机器的
    • 通常(不是所有)repr()得到的效果是:obj == eval(repr(obj))

 

格式化操作符辅助符

通过”%”可以进行字符串格式化,但是”%”经常会结合下面的辅助符一起使用。

辅助符号 说明
* 定义宽度或者小数点精度
用做左对齐
+ 在正数前面显示加号(+)
# 在八进制数前面显示零(0),在十六进制前面显示”0x”或者”0X”(取决于用的是”x”还是”X”)
0 显示的数字前面填充”0″而不是默认的空格
(var) 映射变量(通常用来处理字段类型的参数)
m.n m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

看一些简单的 例子:

1234567891011121314151617181920 num = 100 print \”%d to hex is %x\” %(num, num)print \”%d to hex is %X\” %(num, num)print \”%d to hex is %#x\” %(num, num)print \”%d to hex is %#X\” %(num, num)  # 浮点数f = 3.1415926print \”value of f is: %.4f\” %f # 指定宽度和对齐students = [{\”name\”:\”Wilber\”, \”age\”:27}, {\”name\”:\”Will\”, \”age\”:28}, {\”name\”:\”June\”, \”age\”:27}]print \”name: %10s, age: %10d\” %(students[0][\”name\”], students[0][\”age\”])print \”name: %-10s, age: %-10d\” %(students[1][\”name\”], students[1][\”age\”])print \”name: %*s, age: %0*d\” %(10, students[2][\”name\”], 10, students[2][\”age\”]) # dict参数for student in students:print \”%(name)s is %(age)d years old\” %student

代码输出为:

对于Python的格式化操作符,不仅可以接受tuple类型的参数,也可以支持dict,象上面代码的最后一部分,那么格式化字符串中就可以直接使用”%(key)s”(这里的s根据具体类型改变)的方式表示dict中对应的value了。

 

字符串模板

其实,在Python中进行字符串的格式化,除了格式化操作符,还可以使用string模块中的字符串模板(Template)对象。下面就主要看看Template对象的substitute()方法:

1234567891011 from string import Template s = Template(\”Hi, $name! $name is learning $language\”)print s.substitute(name=\”Wilber\”, language=\”Python\”) d = {\”name\”: \”Will\”, \”language\”: \”C#\”}print s.substitute(d) # 用??$??</span></div><div class=s = Template(\”This book ($bname) is 17\” />\”)print s.substitute(bname=\”TCP/IP\”)

代码结果为:

 

字符串内建函数format()

Python2.6开始,新增了一种格式化字符串的函数str.format(),通过这个函数同样可以对字符串进行格式化处理。在format()函数中,使用“{}”符号来当作格式化操作符。

下面直接通过一些简单的例子演示format()函数的基本使用:

1234567891011121314151617181920212223242526272829

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...