python3从零学习

python3从零学习-5.1.2、字符串模块string

2020-04-28  本文已影响0人  山海皆可平z

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 参数被传入的对象。 一般来说,你不应该修改它,但并不强制要求只读访问。

上一篇下一篇

猜你喜欢

热点阅读