Python string库详解:字符串模板与格式化处理技巧
本文深入解析Python标准库string的核心功能,涵盖capwords实现英文首字母大写、Template类进行安全的字符串模板替换,以及format方法的高级格式化技巧。通过自定义分隔符、进制转换及数值对齐等实例,帮助开发者掌握高效、规范的字符串处理方案,提升代码可读性与执行效率。
一、前言
在软件开发中,掌握高效的字符串处理技巧能显著提升开发效率。字符串操作不仅是日常编码的基础,也是自然语言处理(NLP)领域的核心知识之一。
Python 3标准库提供了专门的string模块来处理字符串。本文将系统介绍该模块中各种高效且实用的字符串处理方法。
二、首字母大写处理
对于由英文单词组成的字符串,常需将每个单词的首字母转换为大写。若未掌握专用函数,通常需通过循环遍历、判断空格位置、获取ASCII编码并替换为大写字母来实现,过程较为繁琐。
Python 3的string库提供了capwords()函数,可直接实现首字母大写转换。以下代码演示了该函数的具体用法。
import string
s = "When he shewed the riches of his glorious kingdom and the honour of his excellent majesty many days, even an hundred and fourscore days"
print("原始字符串")
print(s)
result = string.capwords(s)
print("首字母大写字符串")
print(result)
运行上述代码后,输出结果将显示所有单词首字母均为大写的字符串。

三、字符串模板基础
string库中的string.Template()类可用于构建字符串模板,实现字符串拼接与替换。示例代码如下。
import string
values = {
"name": "liyuanjing",
"age": "13",
}
s = """My name is : $name
I am $age years old
"""
template_str = string.Template(s)
print(template_str.substitute(values))
上述代码利用string.Template创建模板对象,并通过substitute()方法传入字典进行字符串替换。

若替换字典中缺少模板所需的key,substitute()会抛出异常。为此,string库提供了safe_substitute()函数,用于处理缺失key的情况。
import string
values = {
"name": "liyuanjing",
"age": "13",
}
s = """My name is : $name
I am $age years old
$work
"""
template_str = string.Template(s)
print(template_str.safe_substitute(values))
当字典中缺少对应值时,safe_substitute()会保留原始模板字符串不变。运行效果如下所示。

四、自定义高级模板
上述模板遵循string库的默认规则。实际上,我们可以通过继承string.Template类来自定义匹配规则,具体实现代码如下。
import string
class MyTemplate(string.Template):
delimiter = '@'
idpattern = '[a-z]+_[0-9]+'
values = {
"name_1": "liyuanjing",
"age_1": "13",
}
s = """My name is : @name_1
I am @age_1 years old
@work_1
"""
template_str = MyTemplate(s)
print(template_str.safe_substitute(values))
代码中,delimiter属性定义了分隔符,默认值为“$”,此处被修改为“@”。idpattern属性通过正则表达式定义了key的命名规则,例如匹配“字符串_数字”格式。运行后效果如下。

五、format格式化用法
基本格式化处理
具备其他编程语言经验的开发者通常熟悉format字符串替换。以下直接展示其基本使用方式。
print("My name is {}".format("liyuanjing"))#大括号匹配,按顺序依次填充
print("My {1} is {0}".format("liyuanjing","name"))#数字匹配,按位置依次填充
print("My {name} is {tom}".format(tom="liyuanjing",name="name"))#关键字匹配,按关键字填充
运行上述代码,输出结果如下。

六、format进阶用法
format函数不仅支持字符串替换,还可用于文本对齐、控制小数位数等场景。以下演示这些进阶用法的具体实现。
print('{} and {}'.format('tom', 'Jerry'))
print('{:10s}'.format('*')) # 默认左对齐
print('{:>10s}'.format('*')) # 右对齐
print('{:^10s}'.format('*')) # 中间对齐
print('{:<10s}'.format('*')) # 左对齐
print('{} is {:.2f}'.format(3.411592653, 3.1415926))#取2位小数
values = {
"name_1": "liyuanjing",
"age_1": "13",
}
s = """My name is : {name_1}
I am {age_1} years old
"""
print(s.format(**values))
代码注释已详细说明各参数含义,此处不再赘述。运行效果如下。

七、format高阶用法
除了基础格式化,format还可用于进制转换及ASCII码符号处理。以下代码实现了这些高阶功能。
print('{:b}'.format(8))#:b转换为二进制
print('{:c}'.format(200))#:c转换Unicode字符串
print('{:d}'.format(111))#:d转换十进制
print('{:o}'.format(8))#:o转换八进制
print('{:x}'.format(32))#:x转换十六进制
print('{:e}'.format(32))#:e转换幂符号
print('{:%}'.format(0.32))#:%转换百分值
print('{:n}'.format(32000000000))#:n就是数值
print('{:g}'.format(32000000000))#:n也是数值,不过特别大时转换为幂科学计数
运行上述代码,输出结果如下。

至此,关于Python string库中文本常量与字符串模板的介绍完毕。如需了解更多Python string库相关内容,建议查阅本站过往文章或继续阅读后续系列教程,感谢大家的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













