美文网首页python3从零学习
python3从零学习-5.1.2、字符串模块string

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

作者: 山海皆可平z | 来源:发表于2020-04-28 11:01 被阅读0次

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

    相关文章

      网友评论

        本文标题:python3从零学习-5.1.2、字符串模块string

        本文链接:https://www.haomeiwen.com/subject/iyfvwhtx.html