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 = ‘ \t\n\r\v\f‘
ascii_lowercase = ‘abcdefghijklmnopqrstuvwxyz‘
ascii_uppercase = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ‘
ascii_letters = ascii_lowercase + ascii_uppercase
digits = ‘0123456789‘
hexdigits = digits + ‘abcdef‘ + ‘ABCDEF‘
octdigits = ‘01234567‘
punctuation = r"""!"#$%&‘()*+,-./:;<=>?@[\]^_`{|}~"""
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.填充段落

原文地址:https://www.cnblogs.com/traditional/p/10436500.html

时间: 2024-10-11 01:52:09

2.Python3标准库--文本的相关文章

Python3标准库

文本 1. string:通用字符串操作 2. re:正则表达式操作 3. difflib:差异计算工具 4. textwrap:文本填充 5. unicodedata:Unicode字符数据库 6. stringprep:互联网字符串准备工具 7. readline:GNU按行读取接口 8. rlcompleter:GNU按行读取的实现函数 二进制数据 9. struct:将字节解析为打包的二进制数据 10. codecs:注册表与基类的编解码器 数据类型 11. datetime:基于日期与

Python3标准库:hashlib密码散列

1. hashlib密码散列 hashlib模块定义了一个API来访问不同的密码散列算法.要使用一个特定的散列算法,可以用适当的构造器函数或new()来创建一个散列对象.不论使用哪个具体的算法,这些对象都使用相同的API. 1.1 散列算法 由于hashlib有OpenSSL提供“底层支持”,所以OpenSSL库提供的所有算法都可用,包括: md5 sha1 sha224 sha256 sha384 sha512 有些算法在所有平台上都可用,而有些则依赖于底层库.这两种算法分别由algorith

4.Python3标准库--算法

(一)functools:管理函数的工具 import functools ''' functools模块提供了一些工具来管理或扩展和其他callable对象,从而不必完全重写 ''' 1.修饰符 from functools import partial ''' functools模块提供的主要工具就是partial类,可以用来包装一个有默认参数的callable对象. 得到的对象本身就是callable,可以把它看作是原来的参数. ''' # 举个栗子 def foo(name, age,

Python3标准库:weakref对象的非永久引用

1. weakref对象的非永久引用 weakref模块支持对象的弱引用.正常的引用会增加对象的引用数,并避免它被垃圾回收.但结果并不总是如期望中的那样,比如有时可能会出现一个循环引用,或者有时需要内存时可能要删除对象的缓存.弱引用(weak reference)是一个不能避免对象被自动清理的对象句柄. 1.1 引用 对象的弱引用要通过ref类来管理.要获取原对象,可以调用引用对象. import weakref class ExpensiveObject: def __del__(self):

Python3标准库:urllib.parse分解URL

1. urllib.parse分解URL urllib.parse模块提供了一些函数,可以管理URL及其组成部分,这包括将URL分解为组成部分以及由组成部分构成URL. 1.1 解析 urlparse()函数的返回值是一个ParseResult对象,其相当于一个包含6个元素的tuple. from urllib.parse import urlparse url = 'http://netloc/path;param?query=arg#frag' parsed = urlparse(url)

python3 标准库一些总结

1,统计个数(字符串,列表等)或者初始化字典,输出一个包含键和计数的字典或提供一个元素序列,还可以使用关键字参数讲字符串名映射到计数. 模块:collections 构造函数: Counter import collections text1 = "asbgewgrg2121aaassbsbgeeeegwwrr" c = collections.Counter(text1) print(c) print(collections.Counter({'a':3,'b':2})) print

Python3标准库:array数组

1. array数组 array模块定义了一个序列数据结构,看起来与list很相似,只不过所有成员都必须是相同的基本类型.支持的类型包括所有数值类型或其他固定大小的基本类型(如字节). 代码 类型 最小大小(字节) b int 1 B int 1 h signed short 2 H unsigned short 2 i signed int 2 I unsigned int 2 l signed long 4 L unsigned long 4 q signed long long 8 Q u

Python3标准库:bisect维护有序列表

1. bisect维护有序列表 bisect模块实现了一个算法来向列表中插入元素,同时仍保持列表有序. 1.1 有序插入 下面给出一个简单的例子,这里使用insort()按有序顺序向一个列表中插入元素. import bisect # A series of random numbers values = [14, 85, 77, 26, 50, 45, 66, 79, 10, 3, 84, 77, 1] print('New Pos Contents') print('--- --- ----

Python3标准库:copy复制对象

1. copy复制对象 copy模块包括两个函数copy()和deepcopy(),用于复制现有的对象. 1.1 浅副本 copy()创建的浅副本(shallow copy)是一个新容器,其中填充了原对象内容的引用.建立list对象的一个浅副本时,会构造一个新的list,并将原对象的元素追加到这个list. import copy import functools @functools.total_ordering class MyClass: def __init__(self, name):