2.Python3标准库--文本
Posted traditional
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.Python3标准库--文本相关的知识,希望对你有一定的参考价值。
(一)string:文本常量和模板
1.函数
import string ‘‘‘ string模块在最早的Python版本中就已经有了。以前这个模块中提供的很多函数已经移植到str对象中,不过这个模块仍然保留了很多有用的常量和类来处理str对象 ‘‘‘ # 函数capwords会把一个字符串中的所有单词的首字母变成大写 s = "when i was young, i‘d listen to the radio" print(s) # when i was young, i‘d listen to the radio print(string.capwords(s, sep=" ")) # When I Was Young, I‘d Listen To The Radio # 这段代码的结果等同于先调用split,把结果中的单词首字母大写,然后调用join来合并结果。sep可以省略,默认为空格
2.模板
import string ‘‘‘ 字符串模板是PEP292当中新增的部分,将作为内置拼接语法的替代做法。使用string.Template拼接变量时,要在名字前加前缀$来标识变量(例如$var)。 或者,如果有必要区分变量和周围的文本,可以使用大括号包围变量,如${var} ‘‘‘ # 先看看str.format这种常规做法 values = {"var": "foo"} s = "var: %(var)s, escape: %%, %(var)sxxx" print("result ->", s % values) # result -> var: foo, escape: %, fooxxx # 注意到中间的escape: %%,这种触发字符要想让其失去效果,只当做普通字符来处理的话,要重复两次来进行转义 # 下面来使用模板,可以看到最后一个var加上了{},因为var和后面的文本黏在一起了 s = "var: $var, escape: $$, ${var}xxx" # 第一步:先得到可以用来渲染的模板 t = string.Template(s) # 第二步:进行替换,会有一个返回值,就是我们替换之后的结果 print(t.substitute(values)) # var: foo, escape: $, fooxxx print(t.substitute(**values)) # var: foo, escape: $, fooxxx # 可以看到var都被替换成了foo。但是注意到我们传入value(一个字典),和**value(var=foo关键字参数)得到的结果是一样的。 # 因为string的模板不像flask,tornado等框架的模板一样,支持逻辑上的运算或者数据结构上的变换。 # 如果在jinja2中,我传入字典的话,那么在模板中还可以进行取值,但是string中的模板不支持,只支持字符间的替换。 # 我们来看看jinja2 import jinja2 s = "{{var}}--{{dic.get(‘key‘, ‘value‘)}}--{{dic.get(‘KEY‘, ‘value‘)}}" t = jinja2.Template(s) print(t.render(var="foo", dic={"key": "mashiro"})) # foo--mashiro--value # 可以看到jinja2是支持字典的取值,由于dic中没有"KEY"这个键,那么获取默认值。但是string.Template是不支持的。 # 因此对于string.Template来说,传入关键字参数和字典是一样的,传入字典会自动将字典给打开,根据k,v进行替换 # 此外对于字符串的模板还有一个安全的用法 s = "$var--$missing" t = string.Template(s) # 我这里没有传入missing,因此如果使用substitute则会报错,但如果是safe_substitute的话会自动忽略,只对传入的进行替换 # 那如果我多穿了一个,比如说s中并没有$xxx,那么会怎么样呢? print(t.safe_substitute(var="foo", xxx="xxxxx")) # foo--$missing # 显然没有任何问题,因此可以总结一下 # s中定义了,但是模板替换的时候没有传相应的值,那么substitute会报错,safe_substitute不会 # 但是s中没有定义,比如$xxx,而我们却多传了,那么substitute和safe_substitute都不会报错,会自动忽略
3.高级模板
‘‘‘ 可以调整string.Template在模板中查找变量名所使用的正则表达式模式,以改变它的默认语法。 我们可以修改delimiter和idpattern属性。 因此最简单的方法就是自己定义一个类,继承自string.Template,然后重写这两个属性。 但是说实话,这个不常用,因此不再详细介绍。 ‘‘‘
4.Formatter
‘‘‘ string.Formatter类实现了与str的format()方法相同的布局规范。 特性包括类型强制转换,对齐,属性,和域引用,命名和位置模板参数以及类型特定的格式化选项。 大部分情况下,使用format()已经足够,而且会更加方便,但也可以通过Formatter构建子类,实现更复杂的效果(基本不用) ‘‘‘
5.常量
import string ‘‘‘ string模块包括大量与ASCII和数值字符集相关的常量,都可以通过string这个模块直接获取 whitespace = ‘ vf‘ ascii_lowercase = ‘abcdefghijklmnopqrstuvwxyz‘ ascii_uppercase = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ‘ ascii_letters = ascii_lowercase + ascii_uppercase digits = ‘0123456789‘ hexdigits = digits + ‘abcdef‘ + ‘ABCDEF‘ octdigits = ‘01234567‘ punctuation = r"""!"#$%&‘()*+,-./:;<=>[email protected][]^_`{|}~""" printable = digits + ascii_letters + punctuation + whitespace ‘‘‘
(二)textwrap:格式化文本段落
1.示例数据
import textwrap ‘‘‘ 需要美观打印(pretty-printing)的情况下,可以使用textwrap模块格式化要输出的文本。 它提供了很多文本编辑器和字符处理器中都有的段落自动换行或填充特性 ‘‘‘ text = ‘‘‘ Smelling the fragrance of blood, I find requiem hall A run-down scene, the specter of debauchery singing, Black rosemary blooming vines meandering growth The soul looked, beliefs Scarlet moonlight Smelling the fragrance of blood, I find requiem hall Long-haired vampire queen opened the dusty window The deadwood shadow as her face, pure, such as teenage Resentment of her voice, together with the souls of chant Loved one, you remember I look like I demeaning the night, you sad ‘‘‘
2.填充段落