一、模块介绍
1. 定义:
模块:本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test)
用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能)
2. 语法:
• import 语句
当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表。
导入模块:
1、 import module1[, module2[,... moduleN]
调用符号:
• From…import 语句
Python的from语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:
1、from modname import name1[, name2[, ... nameN]]
From…import* 语句
把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:
1、from modname import *
这提供了一个简单的方法来导入一个模块中的所有项目。慎用 from…import *。
• import 和 from 的区别:
import导入使用时,加前缀 module.func。相当于把模块代码放在当前文件中执行一遍。
from可以指定需要的函数或变量导入。
导入模块和当前py文件都有同一个函数,调用会调用哪一个?
因为python是解释型,所以后面覆盖前面。
• from … import … as …
3. import本质
import 本质:
导入一个模块本质就是解释执行一个python文件
导入一个包本质就是解释该包下的__init__.py文件
• __init__.py
包:本质就是一个目录(必须带有一个__init__.py文件),用来从逻辑上组织模块
导入包,怎么导入?
导入包的本质:执行包下面的__init__.py文件
导入包下的模块
包下面的模块,这样调用是错误的
在__init__.py内容中导入模块
4、路径搜索和搜索路径
上面提到的都是导入同级目录下的模块,如果不在同一个目录下:
import module_name实际找module_name.py文件,是文件就一定要有路径。
导入模块就是:找到.py文件的位置,把它执行一遍,从哪里找呢?sys.path.
5. 导入优化
6. 阻止属性导入
如果你不想让某个模块属性被 “from module import *” 导入 , 那么你可以给你不想导入的属性名称加上一个下划线( _ )。 不过如果你导入了整个模块或是你显式地导入某个属性这个隐藏数据的方法就不起作用了。
二、模块的分类
a:标准库
b:开源模块-第三方模块
c:自定义模块
三、常用内置模块
1、os模块
用于提供系统级别的操作
2、time和datetime
在Python中,通常有这几种方式来表示时间:
时间戳
格式化的时间字符串
元组(struct_time)共九个元素。
由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。
UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。
时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time)”,返回的是float类型。返回时间戳方式的函数主要有time,clock等。
元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime,localtime,strptime。
时间转为时间戳
格式化时间字符串
转化时间戳和元组到时间字符串
时间加减
3、random模块
4、sys模块
5、shutil模块
高级的 文件、文件夹、拷贝、压缩包等 处理模块
6、ConfigParser
用于对特定的配置进行操作,当前模块的名称在 python 3.x 版本中变更为 configparser。
来看一个好多软件的常见文档格式如下
如果想用python生成一个这样的文档怎么做呢?
• 生成
• 读取出来
• configparser增删改查语法
7、hashlib模块
用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法,hash 加密都是bytes类型
python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 再进行处理然后再加密
8、Subprocess模块
调用subprocess.run(…)是推荐的常用方法,在大多数情况下能满足需求,但如果你可能需要进行一些复杂的与系统的交互的话,你还可以用subprocess.Popen,语法如下:
可用参数:
args:shell命令,可以是字符串或者序列类型(如:list,元组)
bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲
stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。 所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。
shell:同上
cwd:用于设置子进程的当前目录
env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
universal_newlines:不同系统的换行符不同,True -> 同意使用
startupinfo与createionflags只在windows下有效 将被传递给底层的CreateProcess函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等
终端输入的命令分为两种:
• 输入即可得到输出,如:ifconfig
• 输入进行某环境,依赖再输入,如:python
需要交互的命令示例
9、re-正则表达式模块
常用正则表达式符号
最常用的匹配语法
分组匹配 和 group、groups、groupdict
10、logging模块
python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug, info, warning, error and critical 5个级别,下面我们看一下怎么用。
最简单用法
看一下这几个日志级别分别代表什么意思
如果想把日志写到文件里,也很简单
其中下面这句中的level=loggin.INFO意思是,把日志纪录级别设置为INFO,也就是说,只有比日志是INFO或比INFO级别更高的日志才会被纪录到文件里,在这个例子, 第一条日志是不会被纪录的,如果希望纪录debug的日志,那把日志级别改成DEBUG就行了。
如果想同时把log打印在屏幕和文件日志里,就需要了解一点复杂的知识 了
11、json和pickle数据序列化
str eval
数据序列化
json只能处理简单的,所有语言通用的,函数不能json序列化
pickle可以序列化python所有的数据类型
12、shelve 模块
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
13、xml处理模块
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,json之前的交换方式
参考文档:
14、PyYAML模块
Python也可以很容易的处理ymal文档格式,只不过需要安装一个模块,参考文档
需要python教程+PDF电子书的小伙伴
关注微信公众号:速学Python,后台回复:简书,即可拿Python学习资料