模块与包
1.包
什么是包?
它是一系列模块文件的结合体,表示形式就是一个文件夹。该文件夹内部通常会有一个__init__文件。创建包的目的不是为了运行,而是被导入使用,包的本质还是一个模块。
首次导入包:
先产生一个执行文件的名称空间
(1).创建包下面的__init__.py文件的名称空间
(2).执行包下面的__init__.py文件中的代码,将产生的名字放入包下面的__init__.py文件名称空间中
(3).在执行文件中拿到一个指向包下面的__init__.py文件名称空间的名字
在导入语句中,号的左边肯定是一个包(文件夹)。在python3中,即使包下没有__init__.py文件,import仍然不会报错;而在python2中,包下一定要有该文件,否者import报错。当你在删除不必要文件的时候,不要随意删除__init__.py文件。
2.logging模块
1.日志模块中共分为五个等级,分别是:
logging.debug('debug日志') #等级1
logging.info('info日志') #等级2
logging.warning('warning日志') #等级3
logging.error('error日志') #等级4
logging.critical('critical日志') #等级5
2.日志还有四种不同的对象
logger对象:负责产生日志
filter对象:过滤日志
handler对象:控制日志输出的位置
formmater对象:规定日志内容的格式
# 1.logger对象:负责产生日志 logger = logging.getLogger('转账记录') # 2.filter对象:过滤日志(了解) # 3.handler对象:控制日志输出的位置(文件/终端) hd1 = logging.FileHandler('a1.log',encoding='utf-8') # 输出到文件中 hd2 = logging.FileHandler('a2.log',encoding='utf-8') # 输出到文件中 hd3 = logging.StreamHandler() # 输出到终端 # 4.formmater对象:规定日志内容的格式 fm1 = logging.Formatter( fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', ) fm2 = logging.Formatter( fmt='%(asctime)s - %(name)s: %(message)s', datefmt='%Y-%m-%d', ) # 5.给logger对象绑定handler对象 logger.addHandler(hd1) logger.addHandler(hd2) logger.addHandler(hd3) # 6.给handler绑定formmate对象 hd1.setFormatter(fm1) hd2.setFormatter(fm2) hd3.setFormatter(fm1) # 7.设置日志等级 logger.setLevel(20) # 8.记录日志 logger.debug('写了半天 有点小累')
3.logging配置字典
4.hashlib模块
哈希算法是指通过一个函数,把任意长度的数据转换为一个长度固定的数据串,这个字符串称之为密文。当密文的长度越长,内部对应的算法就越复杂。使用哈希算法的目的是为了发现原始数据是否被人篡改过。
import hashlib # 引入模块 md = hashlib.md5() md.update(b'areyouok?') print(md.hexdigest()) >>>:408ac8c66b1e988ee8e2862edea06cc7 md.update(b'are') md.update(b'you') md.update(b'ok?') print(md.hexdigest()) >>>:408ac8c66b1e988ee8e2862edea06cc7 # 相同的内容可以分多次传入,只要传入的内容相同,那么生成的密文也肯定相同。
可以通过加盐处理,增强密码的保护性。
# 静态加盐处理 import hashlib md = hashlib.md5() md.update(b'随便写些内容都可以')# 加盐处理 md.update(b'hello')# 真正的内容 print(md.hexdigest()) #动态加盐处理 import hashlib def get_md5(data): md = hashlib.md5() md.update('加盐'.encode('utf-8')) md.update(data.encode('utf-8')) return md.hexdigest() password = input("password>>>: ") res = get_md5(password) print(res) # 输入密码以后,会得到与密码相对应的密文
5.openpyxl模块
03版本之前,Excel文件的后缀名叫xls;03版本以后,Excel文件的后缀名叫xlsx。
xlwd指写Excel,xlrt指读Excel。xlwd和xlrt既支持03版本之前的Excel文件,也支持03版本之后的Excel文件。
from openpyxl import Workbook # 读文件 wb = Workbook() wb1 = wb.create_sheet('xxx',0) # 创建一个表单页,后面可以通过数字来控制位置 wb2 = wb.create_sheet('yyy',1) # wb1.title = 'login' # wb1['A2'] = 444 # wb1['A3'] = 555 # wb1['A4'] = '=sum(A2:A3)' wb1.cell(row=5,column=4,value=33)# cell(行,列,要写的值 ) wb2.append(['username','age','hobby ']) wb2.append(['lili',18,'reading']) wb.save('li.xlsx') # 保存新建的Excel文件 from openpyxl import load_workbook # 写文件