八、模块与包

一、模块

模块就是一系列功能的集合体,在Python中,一个py文件就是一个模块

二、使用模块

1、import导入模块

首次导入模块发生三件事:

1)、创建一个模块的名称空间

2)、执行模块对应的文件,将产生的名字存放于1中的名称空间

3)、在当前执行文件中拿到一个模块名,该模块名指向1的名称空间

之后的导入会直接引用第一次导入的结果,不会重复执行文件

要调用模块名称空间中的名字,语法:

模块名.模块名称空间中的名字

为模块名起别名:

import 模块名 as 别名

2、from...import...导入模块

发生三件事:

1)、创建一个模块的名称空间

2)、执行模块对应的文件,将产生的名字存放于1中的名称空间

3)、在当前名称空间中直接拿到模块中的名字,可以直接使用,不用加任何前缀

3、模块的搜索路径

模块的查找顺序是:内存中已经加载的模块---->内置模块----->sys.path路径中包含的模块

sys.path的第一个路径是当前文件所在的文件夹

4、__name__的值

1)、在文件被执行的情况下,等于'__main__'

2)、在文件被导入的情况下,等于模块名

5、内置模块

1)、logging模块:

logging.debug()      调试,日志级别10

logging.info()                     日志级别20

logging.warning()    警告信息,日志级别30

logging.error()         出错,日志级别40

logging.critical()                 日志级别50

logging.basicConfig()

logger:负责产生日志

filter:过滤日志(不常用)

handler:控制日志打印到文件orvsdr

formatter:控制日志的格式

日志级别:两层关卡,只有都通过了,才能放行

2)、json模块、pickle模块

序列化:内存中的数据结构---->转成一种中间格式---->存到文件中

即把对象(变量)从内存中变成可存储或传输的过程称之为序列化

序列化可以:1、持久保存状态;2、跨平台数据交互

json模块

json.dump()    序列化,即对数据进行编码

json.dump()    反序列化,即对数据进行解码

pickle模块

和json模块一样,pickle模块是byte类型

3)、os模块

os.path.dirname(path)              返回文件路径

os.path.join(path1,path2...)      把目录和文件名合成一个路径

os.path.exists(path)                  路径存在则返回True,路径损坏返回False

os.path.isdir(path)                    判断路径是否为目录

os.mkdir(path)                         生成单级目录

os.listdir                                   列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

软件开发目录规范

把项目的根目录添加到环境变量中的格式模板:

import os,sys

BASE_DIR = os.path.dirname(os.path.dirname(__file__))

sys.path.append(BASE_DIR)

4)、time模块

time.time()           时间戳

time.strftime('')     格式化的字符串  

time.localtime()    对象

5)、datetime模块

datetime.datetime.now() 

6)、random模块

7)、sys模块

8)、shutil模块

9)、shelve模块

10)、xml模块

11)、re模块

正则表达式

.*       贪婪匹配,代表匹配任意长度,任意的字符

.*?     把贪婪匹配变成非贪婪匹配

()       分组

[]        匹配一个指定范围内的字符(这一个字符来自于括号内定义的)。当 - 需要被当作普通符号匹配时,只能放到  [] 最左边或最右边。 [] 内的 ^ 代表取反的意思

括号内加 ?: 代表取匹配成功的所有内容,而不仅仅是括号内的内容

12)、hashlib模块

hash就是一种算法,该算法接收传入的内容,经过运算得到一串hash值

特点:

1、只要传入的内容一样,得到的hash值必然一样。可以文件完整性校验

2、不能由hash值反解成内容。可以把密码做成hash值,不要用明文传输

3、只要使用的hash值算法不变,无论校验的内容有多大,得到的hash值长度是固定的

13)、密码加盐模块hmac

hmac.new()

14)、subprocess模块

15)、configparser模块

6、包

模块的一种形式

导入包的时候产生的三件事:

1)、产生一个包的名称空间

2)、执行包下的__init__.py文件,将产生的名字存放于包的名称空间中

3)、在当前执行文件中拿到包的名字,该名字指向包的名称空间

在导入带点的,点的左边必须都是包,这是导入包特有的语法

包内模块之间的导入应该使用from...import...

from...import...,import后必须是一个明确的名字,不能有任何前缀

模块的相对导入和绝对导入,推荐绝对导入

原文地址:https://www.cnblogs.com/Python1/p/8931005.html