Python 的 string 模块提供了一组用于处理字符串的常量和函数,方便用户进行各种字符串操作。虽然 Python 的字符串类型本身已经非常强大,但 string 模块提供了一些额外的工具和符号集,简化了特定类型的字符串操作。
常量
string 模块定义了一些常量,这些常量是字符串操作中常用的字符集或模板。
- ascii_letters:包含所有 ASCII 字母(小写和大写)。等同于 string.ascii_lowercase + string.ascii_uppercase。内容:’abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’
- ascii_lowercase:包含所有小写的 ASCII 字母。内容:’abcdefghijklmnopqrstuvwxyz’
- ascii_uppercase:包含所有大写的 ASCII 字母。内容:’ABCDEFGHIJKLMNOPQRSTUVWXYZ’
- digits:包含所有十进制数字(0-9)。内容:’0123456789′
- hexdigits:包含所有十六进制数字(0-9 和 A-F)。内容:’0123456789abcdefABCDEF’
- octdigits:包含所有八进制数字(0-7)。内容:’01234567′
- punctuation:包含所有 ASCII 标点符号。内容:’!”#$%&\'()*+,-./:;<=>?@[\\]^_{|}~’`
- printable:包含所有可打印的 ASCII 字符。这包括字母、数字、标点符号和空白字符。内容:’0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!”#$%&\'()*+,-./:;<=>?@[\\]^_{|}~ \t\n\r\x0b\x0c’`
- whitespace:包含所有的空白字符,包括空格、制表符、换行符等。内容:’ \t\n\r\x0b\x0c’
Template 类
string 模块中的 Template 类提供了一种简单的字符串替换机制,可以使用 $ 符号进行占位符替换。相比传统的字符串格式化方法(如 % 或 str.format()),Template 类更适合处理用户输入的字符串格式化,因为它更安全,不易受到注入攻击。
Template 类的常用方法:
- substitute(mapping, **kwargs):替换模板字符串中的所有占位符。如果一个占位符没有被替换,或者如果提供的键不存在,会抛出 KeyError 异常。
- safe_substitute(mapping, **kwargs):类似于 substitute,但不会抛出 KeyError。如果某个占位符无法替换,它会保留原样。
Template 类的用法示例:
from string import Template # 定义模板字符串 t = Template('Hello, $name! Welcome to $place.') # 使用 substitute 方法替换占位符 s = t.substitute(name='Alice', place='Wonderland') print(s) # 输出: Hello, Alice! Welcome to Wonderland. # 使用 safe_substitute 方法进行安全替换 s_safe = t.safe_substitute(name='Alice') print(s_safe) # 输出: Hello, Alice! Welcome to $place.
Formatter 类
string 模块中的 Formatter 类是一个用于实现自定义字符串格式化的类。它是 Python 内置 str.format() 方法背后的机制。通过继承和重写 Formatter 类的方法,可以自定义字符串格式化的行为。
Formatter 类的主要方法:
- format(format_string, *args, **kwargs):用于格式化字符串,类似于format() 方法。
- vformat(format_string, args, kwargs):实际执行格式化的核心方法,format() 方法会调用它。
- parse(format_string):解析格式字符串,生成元组序列 (literal_text, field_name, format_spec, conversion)。
- get_field(field_name, args, kwargs):根据字段名查找值,返回值和可选的字段元组。
- get_value(key, args, kwargs):从参数中获取给定键的值。
- convert_field(value, conversion):执行字段转换,如 !r、!s 等。
- format_field(value, format_spec):应用格式规范(format_spec)到字段值。
Formatter 类的自定义示例:
from string import Formatter class MyFormatter(Formatter): def format_field(self, value, format_spec): # 将所有格式化的值转换为大写 return super().format_field(value, format_spec).upper() formatter = MyFormatter() formatted_string = formatter.format('Hello, {}!', 'world') print(formatted_string) # 输出: HELLO, WORLD!
实用函数
string 模块还包含一些用于字符串操作的实用函数。
- capwords(s, sep=None):将字符串 s 的每个单词的首字母大写,并将单词之间的分隔符设为 sep(默认为空格)。相当于 s.title(),但它会先通过 split() 分割,再通过 join() 重新组合。
用法示例:
import string s = "hello world, this is python." cap_s = string.capwords(s) print(cap_s) # 输出: "Hello World, This Is Python."
参考链接: