Python字串格式化教程与范例

介绍 Python 的字串格式化方法,调整文字与数值的输出格式,并提供实用的范例代码。

在 Python 中若要以特定的格式来输出文字或数值,可以使用透过各种字串的格式化方法来处理,而 Python 字串格式化的方法有两种,一种是类似 C 语言 printf 的语法,另外一种是后来发展的 format 语法,两种都可以使用,以下是各种格式化的使用方式。

基本字串格式化

基本的字串格式化方法是使用 % 运算子,前面放置输出的文字样板,后面放置要安插的数据:

# 字串格式化
msg = 'Hello, %s!' % 'World'
print(msg)
Hello, World!

文字样板的语法就跟 C 语言的 printf 样板类似,以下是常见的几种格式:

语法 说明
%s str() 函数输出文字。
%f 以浮点数方式输出数值。
%d 以十进位整数方式输出数值。
%e%E 以科学记号输出数值。
%o 以八进位整数方式输出数值。
%x%X 以十六进位整数方式输出数值。
%c 以字符方式输出。
%r repr() 函数输出文字。
%% 输出 % 百分比符号。

若有多组文字需要放进样板中,则可用小括号包起来的 tuple:

# 多组文字
msg = '%s, %s!' % ('Hello', 'World')
print(msg)
Hello, World!

这是输出整数的例子:

# 整数
msg = 'I am %d years old.' % 5
print(msg)
I am 5 years old.

文字与整数混用:

# 文字与整数
msg = '%s is %d years old.' % ("James", 5)
print(msg)
James is 5 years old.

除了类似 C 语言 printf 的用法之外,亦可使用新的 format 语法:

# 字串格式化
msg = '{}, {}!'.format('Hello', 'World')
print(msg)
Hello, World!

新的 format 语法可以在大括号中指定安插的参数,例如:

# 改变参数顺序
msg = '{1}, {0}!'.format('Hello', 'World')
print(msg)
World, Hello!

在一般的状况下,format 会自动处理各种类型的数据,不用像 C 语言的 printf 一样个别指定样板,统一使用 {} 即可:

# 文字与整数
msg = '{} is {} years old.'.format("James", 5)
print(msg)
James is 5 years old.

我们也可以明确指定每一项的数据类型:

# 明确指定数据类型
msg = '{:s} is {:d} years old.'.format("James", 5)
print(msg)
James is 5 years old.

空间与对齐

有时候在输出数据时,为了要让文字排版整齐,会固定数据输出的宽度。只要在样板上加上数字,即可指定输出的宽度:

# 指定宽度
msg = '(%10s)' % 'Hello'
print(msg)
(     Hello)

若要靠左对齐,可以加上负号:

# 靠左对齐
msg = '(%-10s)' % 'Hello'
print(msg)
(Hello     )

若是浮点数,可以使用 总宽度.小数位数 的方式来指定:

# 指定浮点数位数
msg = '(%8.3f)' % 12.3456
print(msg)
(  12.346)

若要限制输出字串的长度上限,可以在数字前方加上一个点:

# 文字长度上限
msg = '(%.3s)' % 'Hello'
print(msg)
(Hel)

以下是用新的 format 语法改写的结果:

# 指定宽度
msg = '({:10})'.format('Hello')
print(msg)
(Hello     )
# 靠右对齐
msg = '({:>10})'.format('Hello')
print(msg)
(     Hello)
# 靠左对齐
msg = '({:<10})'.format('Hello')
print(msg)
(Hello     )
# 置中对齐
msg = '({:^10})'.format('Hello')
print(msg)
(  Hello   )
# 指定浮点数位数
msg = '({:8.3f})'.format(12.3456)
print(msg)
(  12.346)
# 文字长度上限
msg = '({:.3})'.format('Hello')
print(msg)
(Hel)

数值格式

若要让数值前方的空白以 0 填补,可以在指定宽度时加上一个 0

# 空白补 0
msg = '%06.2f' % 3.14159
print(msg)
003.14

若要强迫数值加上正负号,可以加上一个加号:

# 加上正负号
msg = '%+4.2f, %+4.2f' % (3.14, -3.14)
print(msg)
+3.14, -3.14

负数加负号,正数留空白:

# 负数加负号,正数留空白
msg = '(% d), (% d)' % (3, -3)
print(msg)
( 3), (-3)

以下是 format 的写法:

# 空白补 0
msg = '{:06.2f}'.format(3.14159)
print(msg)
003.14
# 加上正负号
msg = '{:+4.2f}, {:+4.2f}'.format(3.14, -3.14)
print(msg)
+3.14, -3.14
# 负数加负号,正数留空白
msg = '({: d}), ({: d})'.format(3, -3)
print(msg)
( 3), (-3)

字典与具名参数

格式或文字时,也可以直接使用字典(dictionary)变数:

# 使用字典
data = {'first': 'Hello', 'last': 'World'}
msg = '%(first)s, %(last)s!' % data
print(msg)
Hello, World!

以下是 format 的写法:

# 使用字典
data = {'first': 'Hello', 'last': 'World'}
msg = '{first}, {last}!'.format(**data)
print(msg)
Hello, World!

format 亦可使用具名参数的方式指定:

# 使用具名参数
msg = '{first}, {last}!'.format(first = 'Hello', last = 'World')
print(msg)
Hello, World!

日期与时间

format 亦可接受 datetime 物件,依照指定的样板输出日期与时间:

# 输出日期与时间
from datetime import datetime
msg = '{:%Y-%m-%d %H:%M}'.format(datetime.today())
print(msg)
2018-09-27 14:41

动态格式

样板中的格式也可以透过参数动态来指定:

# 动态格式
msg = '%.*s = %.*f' % (3, 'Gibberish', 3, 2.7182)
print(msg)
Gib = 2.718

以下是 format 的写法:

# 动态格式
msg = '{:.{prec}} = {:.{prec}f}'.format('Gibberish', 2.7182, prec=3)
print(msg)
Gib = 2.718

参考数据:PyFormat

技术教程

Python使用PIL.Image叠合两张影像教程与范例

2022-6-23 10:29:57

技术教程

Python的Big5与UTF-8文件编码转换程序教程

2022-6-24 0:41:49

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 yp10086@vip.qq.com 举报,一经查实,本站将立刻删除。

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索