器→工具, 编程语言

Python标准库之字符串操作string

钱魏Way · · 47 次浏览

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."

参考链接:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注