python3从零学习-5.1.2、字符串模块string
string在python是一个模块string.py
字符串模块string包含字符串常量和两个模板类Formatter和Template,最常用还是文本序列str。
1、字符串常量:
string.ascii_letters
下文所述 ascii_lowercase 和 ascii_uppercase 常量的拼连。 该值不依赖于语言区域,不会发生改变。
string.ascii_lowercase
小写字母 'abcdefghijklmnopqrstuvwxyz'。 该值不依赖于语言区域,不会发生改变。
string.ascii_uppercase
大写字母 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'。 该值不依赖于语言区域,不会发生改变。
string.digits
字符串 '0123456789’。十进制。
string.hexdigits
字符串 '0123456789abcdefABCDEF’。十六进制。
string.octdigits
字符串 '01234567’。八进制。
string.punctuation
字符串 ‘!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~’,由在 C 语言区域中被视为标点符号的 ASCII 字符组成的字符串。
string.printable
由被视为可打印符号的 ASCII 字符组成的字符串。 这是 digits, ascii_letters, punctuation 和 whitespace 的总和。
string.whitespace
由被视为空白符号的 ASCII 字符组成的字符串。 其中包括空格、制表、换行、回车、进纸和纵向制表符。
示例:
import string
print(string.ascii_letters)
print(string.ascii_lowercase)
print(string.ascii_uppercase)
print(string.digits)
print(string.hexdigits)
print(string.octdigits)
print(string.punctuation)
print(string.printable)
print(string.whitespace)
输出:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
0123456789abcdefABCDEF
01234567
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
2、Formatter类
class string.Formatter
Formatter 类包含下列公有方法:
format(format_string, /, *args, **kwargs)
首要的 API 方法。 它接受一个格式字符串和任意一组位置和关键字参数。 它只是一个调用 vformat() 的包装器。
在 3.7 版更改: 格式字符串参数现在是 仅限位置参数。
vformat(format_string, args, kwargs)
此函数执行实际的格式化操作。
它被公开为一个单独的函数,用于需要传入一个预定义字母作为参数,而不是使用 *args 和 **kwargs 语法将字典解包为多个单独参数并重打包的情况。
vformat() 完成将格式字符串分解为字符数据和替换字段的工作。 它会调用下文所述的几种不同方法。
此外,Formatter 还定义了一些旨在被子类替换的方法:
parse(format_string)
循环遍历 format_string 并返回一个由可迭代对象组成的元组 (literal_text, field_name, format_spec, conversion)。
它会被 vformat() 用来将字符串分解为文本字面值或替换字段。
元组中的值在概念上表示一段字面文本加上一个替换字段。 如果没有字面文本(如果连续出现两个替换字段就会发生这种情况),则 literal_text 将是一个长度为零的字符串。
如果没有替换字段,则 field_name, format_spec 和 conversion 的值将为 None。
get_field(field_name, args, kwargs)
给定 field_name 作为 parse() (见上文) 的返回值,将其转换为要格式化的对象。 返回一个元组 (obj, used_key)。
默认版本接受在 PEP 3101 所定义形式的字符串,例如 "0[name]" 或 "label.title"。 args 和 kwargs 与传给 vformat() 的一样。 返回值 used_key 与 get_value() 的 key 形参具有相同的含义。
get_value(key, args, kwargs)
提取给定的字段值。 key 参数将为整数或字符串。
如果是整数,它表示 args 中位置参数的索引;如果是字符串,它表示 kwargs 中的关键字参数名。
args 形参会被设为 vformat() 的位置参数列表,而 kwargs 形参会被设为由关键字参数组成的字典。
对于复合字段名称,仅会为字段名称的第一个组件调用这些函数;后续组件会通过普通属性和索引操作来进行处理。
因此举例来说,字段表达式 '0.name' 将导致调用 get_value() 时附带 key 参数值 0。 在 get_value() 通过调用内置的 getattr() 函数返回后将会查找 name 属性。
如果索引或关键字引用了一个不存在的项,则将引发 IndexError 或 KeyError。
check_unused_args(used_args, args, kwargs)
在必要时实现对未使用参数进行检测。
此函数的参数是是格式字符串中实际引用的所有参数键的集合(整数表示位置参数,字符串表示名称参数),以及被传给 vformat 的 args 和 kwargs 的引用。
未使用参数的集合可以根据这些形参计算出来。 如果检测失败则 check_unused_args() 应会引发一个异常。
format_field(value, format_spec)
format_field() 会简单地调用内置全局函数 format()。 提供该方法是为了让子类能够重载它。
convert_field(value, conversion)
使用给定的转换类型(来自 parse() 方法所返回的元组)来转换(由 get_field() 所返回的)值。
默认版本支持 's' (str), 'r' (repr) 和 'a' (ascii) 等转换类型。
3、Template类
class string.Template(template)
该构造器接受一个参数作为模板字符串。
substitute(mapping={}, /, **kwds)
执行模板替换,返回一个新字符串。
mapping 为任意字典类对象,其中的键将匹配模板中的占位符。
或者你也可以提供一组关键字参数,其中的关键字即对应占位符。
当同时给出 mapping 和 kwds 并且存在重复时,则以 kwds 中的占位符为优先。
safe_substitute(mapping={}, /, **kwds)
类似于 substitute(),不同之处是如果有占位符未在 mapping 和 kwds 中找到,不是引发 KeyError 异常,而是将原始占位符不加修改地显示在结果字符串中。
另一个与 substitute() 的差异是任何在其他情况下出现的 $ 将简单地返回 $ 而不是引发 ValueError。
此方法被认为“安全”,因为虽然仍有可能发生其他异常,但它总是尝试返回可用的字符串而不是引发一个异常。
从另一方面来说,safe_substitute() 也可能根本算不上安全,因为它将静默地忽略错误格式的模板,例如包含多余的分隔符、不成对的花括号或不是合法 Python 标识符的占位符等等。
Template 的实例还提供一个公有数据属性:
template
这是作为构造器的 template 参数被传入的对象。 一般来说,你不应该修改它,但并不强制要求只读访问。