常用模块&包
re模块
正则表达式简介
概念
又称正则表示式、正则表示法、规则表达式、常规表示法,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。字符组
在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]
表示。
正则表达式 | 待匹配字符串 | 解释 |
---|---|---|
[0123456789] | 6 | 字符组里包含待匹配字符 |
[abcdefghij] | a | 字符组里包含待匹配字符 |
[0-9] | a | 字符组里使用-作为范围,包含待匹配字符 |
[a-z] | a | 字符组里使用-作为范围,包含待匹配字符 |
[A-Za-z0-9] | a | 字符组里使用-作为范围,可以包含多个范围,包含待匹配字符 |
- 字符
元字符 | 解释 |
---|---|
. | 可以匹配除换行符(\n)外的任意字符 |
\w | 可以匹配数字、字母、下划线(_) |
\s | 可以匹配任何空白字符,包括空格、制表符、换页符等等。等价于字符组用法的:[\f\n\r\t\v] |
\d | 可以匹配数字 |
\n | 可以匹配一个换行符 |
\t | 可以匹配一个制表符 |
\b | 定位符,可以匹配一个单词的边界,这个位置的一侧是构成单词的字符,另一侧为非单词字符、字符串的开始或结束位置,”\b”是零宽度的 |
^ | 可以匹配字符串的开始 |
$ | 可以匹配字符串的结尾 |
\W | 可以匹配非字母或数字或下划线 |
\D | 可以匹配非数字 |
\S | 可以匹配非空白符 |
\B | 定位符,可以匹配一个非单词的边界 |
a|b | 可以匹配字符a或字符b |
() | 可以匹配括号内的表达式,也表示一个组 |
[…] | 可以匹配字符组中的字符 |
[^…] | 可以匹配除了字符组中字符的所有字符 |
- 量词
量词 | 解释 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
- 转义符
\
与r
字符 | 解释 |
---|---|
\ |
元字符中很多都包括\ ,如果需要匹配反斜杠\ 的话,则需要对其转义,在\ 前增加一个\ 变为\\ |
r | 如果需要转义的\ 过多,或者觉得麻烦,可以在正则表达式中使用r,则正则表达式字符串中的\ 视为\ ,不当做元字符的一部分 |
- 贪婪匹配原则
在满足匹配条件时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配
re模块介绍
re模块使Python拥有全部的正则表达式功能,re模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数
re模块常用方法
- findall(): 返回所有满足匹配条件的结果至列表中
- search(): 返回第一个包含匹配条件的信息对象,可以调用该对象的group()方法将匹配的字符输出,如果没有匹配到则调用group()方法会报错
- match(): 与search()方法类似,但是仅在字符串开始出匹配,返回第一个包含匹配条件的信息对象,调用该对象的group()方法将匹配的字符输出,如果没有匹配到则调用group()方法会报错
- split(): 逐个按符合条件的字符串对待匹配字符串进行切分,返回结果列表
- sub(): 将待匹配字符串中满足匹配条件的内容进行替换,最后一个参数指定替换的次数,返回替换后的字符串
- subn(): 与sub()方法类型,但是无法指定替换的次数,并且输出的是一个元组,包括替换后的字符串和替换的总次数
- compile(): 将正则表达式编译成为一个正则表达式对象,之后可以用re模块中的方法对对象进行操作
- finditer(): finditer返回一个存放匹配结果的迭代器,用next等方法取出存放结果的对象,再用group()方法取出结果
- findall的优先级查询: 将findall()方法中匹配条件中加括号后,只会输出匹配到的字符串;可以在括号中加入?:取消权限
- split的优先级查询: 将split()方法中的匹配条件加括号后,会将满足条件的切分字符也输出值最终列表中,同样可以在括号中加入?:取消权限
1 | # 示例 |
collections模块
collections模块介绍
这个模块实现了特定目标的容器,以提供Python标准内建容器 dict , list , set , 和 tuple 的替代选择。
collections模块常用方法
名称 | 作用 |
---|---|
namedtuple() | 创建命名元组子类的工厂函数 |
deque | 类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop) |
ChainMap | 类似字典(dict)的容器类,将多个映射集合到一个视图里面 |
Counter | 字典的子类,提供了可哈希对象的计数功能 |
OrderedDict | 字典的子类,保存了他们被添加的顺序 |
defaultdict | 字典的子类,提供了一个工厂函数,为字典查询提供一个默认值 |
UserDict | 封装了字典对象,简化了字典子类化 |
UserList | 封装了列表对象,简化了列表子类化 |
UserString | 封装了列表对象,简化了字符串子类化 |
1 |
|
时间模块
表示时间的三种方式
- 时间戳:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。
1 | import time |
- 结构化时间:结构化时间元组共有9个元素(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
1 | import time |
- 时间字符串:以字符串表示年、月、日、时间
1 | import time |
几种格式之间的转换
- 时间戳–>结构化时间
1 | # time.gmtime(时间戳) #UTC时间,与英国伦敦当地时间一致 |
- 结构化时间–>时间戳
1 | # time.mktime(结构化时间) |
- 字符串时间–>结构化时间
1 | # time.strptime(时间字符串,字符串对应格式) |
- 结构化时间–>字符串时间
1 | # time.strftime(“格式定义”,”结构化时间”) 结构化时间参数若不传,则现实当前时间 |
random模块
random模块介绍
该模块实现了各种分布的伪随机数生成器。
random模块常用方法
- 随机小数
1 | import random |
- 随机整数
1 | import random |
- 随机返回列表元素
1 | import random |
- 随机返回多个列表元素,可以指定返回的个数
1 | import random |
- 打乱顺序
1 | import random |
os模块
os模块介绍
本模块提供了一种使用与操作系统相关的功能的便捷式途径。
os模块常用方法
- 进程参数: 这些函数和数据项提供了操作当前进程和用户的信息。
1 | os.ctermid(): 返回与进程控制终端对应的文件名。 |
- 创建文件对象: 这些函数创建新的 file objects。
1 | os.fdopen(fd, *args, **kwargs):返回打开文件描述符 fd 对应文件的对象。 |
- 文件描述符操作: 这些函数对文件描述符所引用的 I/O 流进行操作。
1 | os.close(fd):关闭文件描述符 fd |
- 文件和目录
1 | os.access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True):使用 实际用户ID/用户组ID 测试对 path 的访问。 |
- 进程管理
1 | os.abort():Generate a SIGABRT signal to the current process. |
- 调度器接口
1 | os.sched_get_priority_min(policy):获取 policy 的最小优先级数值。 policy 是以上调度策略常量之一。 |
- 杂项系统信息
1 | os.confstr(name):Return string-valued system configuration values. |
- 随机数
1 | os.getrandom(size, flags=0):Get up to size random bytes. |
sys模块
sys模块介绍
该模块提供了一些变量和函数。这些变量可能被解释器使用,也可能由解释器提供。
sys模块常用方法
1 | sys.argv: 命令行参数List,第一个元素是程序本身路径 |
序列化相关模块
序列化概念
wiki中对于序列化的解释:在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。
简而言之,将原本的字典、列表等内容转换成一个字符串的过程叫做序列化,其反过程叫反序列化。
序列化目的
- 以某种存储形式使自定义对象持久化
- 将对象从一个地方传递到另一个地方
- 使程序更具维护性
序列化相关模块介绍
- json: 由 RFC 7159 (which obsoletes RFC 4627) 和 ECMA-404 指定,是一个受 JavaScript 的对象字面量语法启发的轻量级数据交换格式,尽管它不仅仅是一个严格意义上的 JavaScript 的字集。
- pickle: 模块 pickle 实现了对一个 Python 对象结构的二进制序列化和反序列化。
- shelve: “Shelf” 是一种持久化的类似字典的对象。 与 “dbm” 数据库的区别在于 Shelf 中的值(不是键!)实际上可以为任意 Python 对象, 即 pickle 模块能够处理的任何东西。
- marshal: 此模块包含一此能以二进制格式来读写 Python 值的函数。这不是一个通用的“持久化”模块。 对于通用的持久化以及通过 RPC 调用传递 Python 对象,请参阅 pickle 和 shelve 等模块。
序列化相关模块常用方法
- json: 用于字符串(包括其他支持json的语言)和python数据类型间进行转换
1 | # --------------- |
- shelve: 只提供一个open方法,用key来访问,使用起来与字典类似
1 | # --------------- |
- pickle: 用于python特有的类型和python的数据类型间进行转换
1 | # --------------- |
- marshal:Python 有一个更原始的序列化模块称为 marshal,但一般地 pickle 应该是序列化 Python 对象时的首选。marshal 存在主要是为了支持 Python 的
.pyc
文件.
Pickle
vs Json
vs Marshal
pickle
vsjson
- pickle 模块会跟踪已被序列化的对象,所以该对象之后再次被引用时不会再次被序列化。marshal 不会这么做。
- 这隐含了递归对象和共享对象。递归对象指包含对自己的引用的对象。这种对象并不会被 marshal 接受,并且实际上尝试 marshal 递归对象会让你的 Python 解释器崩溃。对象共享发生在对象层级中存在多处引用同一对象时。pickle 只会存储这些对象一次,并确保其他的引用指向同一个主副本。共享对象将保持共享,这可能对可变对象非常重要。
- marshal 不能被用于序列化用户定义类及其实例。pickle 能够透明地存储并保存类实例,然而此时类定义必须能够从与被存储时相同的模块被引入。
- 同样用于序列化的 marshal 格式不保证数据能移植到不同的 Python 版本中。因为它的主要任务是支持 .pyc 文件,必要时会以破坏向后兼容的方式更改这种序列化格式,为此 Python 的实现者保留了更改格式的权利。pickle 序列化格式可以在不同版本的 Python 中实现向后兼容,前提是选择了合适的 pickle 协议。如果你的数据要在 Python 2 与 Python 3 之间跨越传递,封存和解封的代码在 2 和 3 之间也是不同的。
pickle
vsmarshal
- JSON 是一个文本序列化格式(它输出 unicode 文本,尽管在大多数时候它会接着以 utf-8 编码),而 pickle 是一个二进制序列化格式;
- JSON 是我们可以直观阅读的,而 pickle 不是;
- JSON是可互操作的,在Python系统之外广泛使用,而pickle则是Python专用的;
- 默认情况下,JSON 只能表示 Python 内置类型的子集,不能表示自定义的类;但 pickle 可以表示大量的 Python 数据类型(可以合理使用 Python 的对象内省功能自动地表示大多数类型,复杂情况可以通过实现 specific object APIs 来解决)。
- 不像pickle,对一个不信任的JSON进行反序列化的操作本身不会造成任意代码执行漏洞。
hashlib模块
hashlib模块介绍
该模块为许多不同的安全哈希和消息摘要算法实现了一个通用接口。包括FIPS安全哈希算法SHA1,SHA224,SHA256,SHA384和SHA512以及RSA的MD5算法。术语“安全哈希”和“消息摘要”是等价的,旧称消息摘要,现在称安全哈希。
hashlib的作用
它通过一个函数,把任意长度的数据转换为一个长度固定的数据串,用以验证原始数据是否被篡改,保证数据的一致性。
hashlib模块应用场景
- 摘要算法
- 密码的密文存储
- 文件的一致性验证
hashlib模块示例
- MD5
1 | import hashlib |
configparser模块
configparser模块介绍
该模块提供了ConfigParser类,该类实现了一种基本配置语言,该语言提供的结构类似于Microsoft Windows INI文件中的结构。您可以使用它来编写可由最终用户轻松定制的Python程序。
configparser模块示例
- 常见配置文档格式
1 | [DEFAULT] |
- configparser创建Python配置文档
1 | # 使用configparser实现上述配置文件 |
- 增删改查CURD操作
1 | # -------- |
logging模块
logging模块介绍
logging模块为应用与库定义了实现灵活的事件日志系统的函数与类。
logging模块详解
- 日志级别
级别 | 数值 |
---|---|
CRITICAL | 50 |
ERROR | 40 |
WARNING | 30 |
INFO | 20 |
DEBUG | 10 |
NOTSET | 0 |
- Log相关对象
对象类型 | 说明 |
---|---|
Logger | 日志,暴露函数给应用程序,基于日志记录器和过滤器级别决定哪些日志有效。 |
LogRecord | 日志记录器,将日志传到相应的处理器处理。 |
Handler | 处理器, 将(日志记录器产生的)日志记录发送至合适的目的地。 |
Filter | 过滤器, 提供了更好的粒度控制,它可以决定输出哪些日志记录。 |
Formatter | 格式化器, 指明了最终输出中日志记录的布局。 |
- basicConfig()方式
1 | import logging |
- logging对象方式:解决了basicconfig方式的中文支持问题和终端、文本同时输出的问题,推荐使用
注意永远不要直接实例化Loggers,应当通过模块级别的函数 logging.getLogger(name)
1 | # 分别定义终端、文件中的日志输出级别,可以设置 Logger 对象为最低级别,之后设置两个不同级别的Handler 对象来实现。 |
pymysql模块
pymysql模块介绍
该软件包包含一个基于PEP 249的纯Python MySQL客户端库。
pymysql模块使用示例
- 版本要求 & 安装
1 | # 版本要求 |
- 基本使用
1 | # 数据库插入数据 |
redis模块
redis模块介绍
Redis键值存储的Python接口。
redis模块使用示例
- 版本要求 & 安装
1 | # 版本要求 |
- 基本使用
1 | import redis |
PyMongo模块
PyMongo模块介绍
PyMongo是一个Python发行版,其中包含用于MongoDB的工具,并且是从Python使用MongoDB的推荐方式。
PyMongo模块使用示例
- 版本要求 & 安装
1 | # 版本要求 |
- 基本使用
1 | import pymongo |