Python字符串处理:capwords、Template模板与format格式化详解
本文详细介绍Python中字符串的高效处理方法。涵盖使用string.capwords()实现首字母大写,利用string.Template及safe_substitute()进行安全的字符串模板替换,以及自定义模板规则。同时深入解析format函数的基本、进阶及高阶用法,包括对齐、精度控制及进制转换,助力提升代码效率。
一、前言
在软件开发中,掌握高效的字符串处理技巧能显著提升开发效率。字符串操作不仅是日常编程的常见需求,也是自然语言处理领域的基石知识。
Python 3标准库中提供了专门的string模块来处理字符串。本文将系统介绍该模块下多种高效的字符串处理策略。
二、首字母大写
处理由英文单词组成的字符串时,常需将每个单词的首字母转换为大写。若未掌握专用函数,通常需通过循环遍历、判断空格位置、获取空格后字符、查询ASCII编码并替换为大写字母来实现,过程较为繁琐。
Python 3提供了内置的高效函数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()方法执行字符串替换操作。

若在替换过程中,values字典中缺少模板所需的key,直接调用substitute()会引发KeyError。为此,string模块提供了safe_substitute()函数作为安全替代方案。
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函数不仅支持简单的字符串替换,还可用于文本对齐、小数位数截取等场景。以下代码展示了这些进阶用法的具体实现:
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函数还支持进制转换及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基础中文本常量与字符串模板的介绍已完成。如需了解更多Python文本常量与字符串模板相关内容,建议查阅本站过往文章或继续浏览后续系列教程。感谢大家的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













