一, 模块介绍
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 电子书的小伙伴
来源: http://www.jianshu.com/p/6e3893f5ea44